__new__ : 這個方法的作用主要是創建一個實例,在創建實例時首先會調用 __new__方法 ,然後調用__init__對實例進行初始化, 如果想修改 __new__ 這個方法,那麼最後要 return 調用一下父類的 __new__ 方法,因為裡面有創建實例的過程,除非你在自定義的 __new ...
__new__ : 這個方法的作用主要是創建一個實例,在創建實例時首先會調用 __new__方法 ,然後調用__init__對實例進行初始化,
如果想修改 __new__ 這個方法,那麼最後要 return 調用一下父類的 __new__ 方法,因為裡面有創建實例的過程,除非你在自定義的 __new__ 方法中自己實現了創建實例的過程:
class Test(object): def __new__(cls, *args, **kwargs): # 第一個參數傳進去的是當前類 如果創建實例需要參數,那麼需要加 *參數 和 **參數 ,否則異常 print('將要創建一個類') return object.__new__(cls) a = Test() >>>將要創建一個類
單例 : 所謂單例,就是無論創建多少個實例,他都只是在第一次創建的時候真正創建,以後再次創建都返回第一次創建的實例 :
class Singleton(object): __instance = None # 控制實例 __first_init = False # 控制初始化實例屬性 def __new__(cls, *args, **kwargs): # 如果實例為空,創建它 if not cls.__instance: cls.__instance = object.__new__(cls) # 否則只是反回第一次創建的實例 return cls.__instance def __init__(self, age, name): # 如果__first__init 為Flase,初始化實例屬性 ,可以控制實例屬性只被初始化一次 if not Singleton.__first_init: self.age = age self.name = name Singleton.__first_init = True a = Singleton(18, 'dog') b = Singleton(19, 'cat') print(a) print(b) print(a.age,a.name) print(b.age,b.name)
>>> <__main__.Singleton object at 0x054A21D0>
<__main__.Singleton object at 0x054A21D0>
18 dog
18 dog
可以看出,後來創建的都是返回第一次創建的那個實例,而且實例屬性只能被初始化一次.