TGViewer
PyCoders (پایتون) PyCoders (پایتون) @python_rd · 4.1K subscribers
Post #2154 461
🔆 متد init واقعاً Constructor نیست! (داستان واقعی ساخت Object در پایتون)

🔹 خیلی‌ها فکر می‌کنند 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
  • ❤ 1
More from @python_rd
  1. Oct 15, 2026🔆 آیا enumerate() بهتر از index-based loop است؟ 🔹 خیلی‌ها هنوز این شکلی می‌نویسند: items…
  2. Oct 15, 2026🔆 یک تله عجیب در پایتون: bool در واقع زیرکلاس int است 🔹 خیلی‌ها می‌دانند True == 1 و Fal…
  3. Oct 13, 2026کوییز پایتون 🔆 خروجی اجرای کد زیر چیست؟ t = (1, 2, [3, 4]) try: t[2] += [5] except TypeEr…
  4. Oct 13, 2026🔆 راز مکانیزم پیاده‌سازی و تغییر جهت NaN در الگوریتم مرتب‌سازی پایتون (Timsort) 🔹 باگ ری…
  5. Oct 13, 2026🔆 حذف تاریخی GIL از پایتون (Free-threaded Python) 🔹 یک رویداد تاریخی: حذف قفل مفسر (GIL)…
  6. Oct 11, 2026🔆 مدیریت تمیز منابع با Context Managerهای سفارشی (contextlib) 🔹 ساخت Context Managerها م…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →