ساخت شیء دو قدم است که پایتون قاطیشان نمیکند: تخصیص نمونهٔ تازه، بعد صدازدن __init__ برای مقداردهی اولیه. تو فقط __init__ را مینویسی؛ __new__ (قدم اول) فقط در سناریوهای پیشرفته لازم میشود.
class Point:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
p = Point(3, 4) # self خودکار همان p است
سه خطای کلاسیک: (۱) جاانداختن self در تعریف متد → خطای آرگومان اضافی موقع فراخوانی؛ (۲) فراموشکردن self. موقع ساخت ویژگی → متغیر محلی که با پایان سازنده میمیرد؛ (۳) انتظار اجرای خودکار سازندهٔ والد در وراثت → پایتون این کار را نمیکند.