سلام
من ۳ تا کلاس مختلف برای 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__ باشد
تاپیک: تو کلاس متد __new__ در کلاس Singleton چه اتفاقی داره می افته؟
سلاااااااااااااااااااام
جواب کامنت محسن جان:
بله استاد رمضان پور اول پیاده سازی سوم که تو این تاپیک نوشتید رو درس دادن و بعدا تو جلسات بعدی یا تو گروه فک کنم گفتن که پیاده سازی سینگلتون که تو ویدیو گفتن اشتباهه و درستش همون پیاده سازی اولی هست که نوشتید.