from functools import wraps def singleton(cls): instance = None @wraps(cls) def wrap(*args,**kwargs): nonlocal instance if instance is None: instance = cls(*args,**kwargs) #args,kwargs是用於將參數傳遞到__init__中 return instance return wrap @singleton class A: pass a = A() a1 = A() id(a) id(a1)
注:python
能夠看到不管有多少個實例,都是共享一個地址ide
原理:get
在實例化類以前,先判斷此類是否已經被實例化過(經過instance是否爲空判斷),若是已經實例化過則直接返回已經實例化的類,若是沒有被實例化過,則進行實例化
it
總結:io
裝飾器也能夠用到類上面
class