💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۲ Mohsen Azizi
چرا type نمونه‌های مختلف از کلاس singleton با هم متفاوت هستند؟
محمدعلی رضا حل شده توسط محمدعلی رضا

سلام

 من ۳ تا کلاس مختلف برای singleton نوشتم و از کلاس نمونه سازی کردم

زمانی که type نمونه‌ها رو print کردم نمونه‌ها type‌های مختلف داشتن

 

class Singleton:
    @classmethod
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super().__new__(cls)
        return cls._instance
s1 = Singleton()
s2 = Singleton()
print(type(s1))  # <class '__main__.Singleton'>
print(type(s2))  # <class '__main__.Singleton'>
print(id(s1) == id(s2))  # True

 

class Singleton:
    @classmethod
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super().__init__(*args, **kwargs)
        return cls._instance
s1 = Singleton()
s2 = Singleton()
print(type(s1))  # <class 'NoneType'>
print(type(s2))  # <class 'NoneType'>
print(id(s1) == id(s2))  # True

 

class Singleton:
    @classmethod
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
            cls._instance = super(*args, **kwargs)
        return cls._instance
s1 = Singleton()
s2 = Singleton()
print(type(s1))  # <class 'super'>
print(type(s2))  # <class 'super'>
print(id(s1) == id(s2))  # True

میشه در مورد اینکه چرا type‌ها تفاوت دارن یکم برام توضیح بدید.

ممنون

جواب استاد رمضان پور:

سلام
روش‌های دوم و سوم اصلا پیاده‌سازی سینگلتون نیست و اشتباه نوشته شدن. در مورد اینکه چرا اشتباست و چرا باید اینطوری بنویسیم توی جلسات آینده و سوالات آکادمی مفصل صحبت کردیم.

 

سوالات آکادمی مربوط به الگوی طراحی Singleton:

تاپیک: نحوه پیاده سازی سینگلتون برای کلاسی که دارای متد ــinit__ باشد

تاپیک: چرا super

تاپیک: تو کلاس متد __new__ در کلاس Singleton چه اتفاقی داره می‌افته؟

 

بهترین پاسخ
محمدعلی رضا ۲۲ تیر ۱۴۰۰، ۱۰:۲۷

سلاااااااااااااااااااام

جواب کامنت محسن جان:

بله استاد رمضان پور اول پیاده سازی سوم که تو این تاپیک نوشتید رو درس دادن و بعدا تو جلسات بعدی یا تو گروه فک کنم گفتن که پیاده سازی سینگلتون که تو ویدیو گفتن اشتباهه و درستش همون پیاده سازی اولی هست که نوشتید.

محمدعلی رضا ۲۳ تیر ۱۴۰۰، ۰۷:۰۵