單例模式,使用__new__
__new__是建構函式, __init__是初始化方法,先呼叫了__new__返回了例項,__init__給這個例項初始化繫結一些屬性。
1class
singleton(object):23
def__new__(cls, *args, **kw):4if
not hasattr(cls, '
_instance'):
5 cls._instance = super(singleton,cls).__new__(cls, *args, **kw) 67
return
cls._instance89
def__init__
(self,name):
10if
not hasattr(self,'
name
'): #
#注意此行
11 self.name=name
1213
def__str__
(self):
14return
'類的名稱:%s 物件的name屬性是:%s hash是:%s id是:%s
'%(self.__class__.__name__,self.name, self.__hash__
, id(self))
1516 x1=singleton('
***x')
17 x2=singleton('
yyyy')
1819
id(x1)
20print
id(x2)
2122
x123
print x2
觀察結果可以發現,x1的name值是***x,x2的name的值也是***x。
如果去掉第10行,那麼x1和x2的name的值都是yyyy。
在某些情況下需要控制某些屬性不被重新賦值,就可以加入判斷。特別是selenium webdriver的。
Python 單例模式( new
單例模式 簡單的理解就是乙個類只有乙個例項 參考 繼承自singleton的子類,並且該子類未重寫 new 方法,則該子類為但單例類 class singleton object 使用 new 實現單例 instance none def new cls,args,kwargs if not cls...
python單例模式和 new
在知道單例模式之前,就要先了解類的 new 方法 python類中 new 方法是最先執行的,因為 new 方法就是給python類提供乙個記憶體位址,當其他地方呼叫這個類後,就是在這個提供的記憶體位址進行執行,而每乙個記憶體位址同一時間內只能執行乙個專案。所以我們只需要在重寫一下 new 方法,在...
python 單例模式 使用 new
單例模式 即乙個類有且僅有乙個例項。那麼通過python怎麼實現乙個類只能有乙個例項呢。class earth 假如你是神,你可以創造地球 print 歡迎來到地球 生成乙個地球 a earth print id a 再生成乙個地球 b earth print id b 輸出 歡迎來到地球 5335...