🔹 خیلیها فکر میکنند init شیء جدید را میسازد، اما در واقع این متد فقط شیء ساختهشده را مقداردهی اولیه (Initialize) میکند. سازندهٔ واقعی پایتون متد new است!
🔹 تفاوت اصلی در چیست؟
new:
یک classmethod است که خودِ متغیر cls را میگیرد، شیء جدید را ایجاد میکند و برمیگرداند.
init:
شیء ایجادشده (self) را میگیرد و ویژگیهای آن را تنظیم میکند.
🔹 نمونه کاربرد واقعی: پیادهسازی الگوی Singleton
اگر بخواهی کلاس فقط و فقط یک نمونه (Instance) در کل برنامه داشته باشد، باید سراغ new بروی:
class DatabaseConnection:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
# ساخت شیء فقط برای بار اول
cls._instance = super().__new__(cls)
return cls._instance
# تست:
db1 = DatabaseConnection()
db2 = DatabaseConnection()
print(db1 is db2) # Output: True (هر دو دقیقاً یک Object هستند)
🔹کاربرد دیگر: تغییر رفتار Typeهای Immutable (مثل تغییر دادن رفتار string یا tuple موقع ساخته شدن).
🐍 @python_rd