[英]Python call __init__() method only one time
有沒有辦法只調用一次類的init ()方法。 或者,當我從類創建對象時,如何禁用init ()的調用?
如果你想要一個單例 ,那里只有一個類的實例,那么你可以創建一個像PEP18那樣的裝飾器:
def singleton(cls):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
@singleton
class MyClass:
pass
試試看:
>>> a = MyClass()
>>> b = MyClass()
>>> a == b
True
沒有直接的方法來禁用__init__
,但有幾種方法可以解決這個問題。 其中一個是旗幟:
class Class:
_init_already = False
__init__(self):
if not Class._init_already:
...
Class._init_already = True
但這很難看。 你真正想要完成的是什么?
您不應該在__init__()
中放置任何只想運行一次的內容。 每次創建類的實例時,都會運行__init__()
。
如果要自定義類的創建,應該考慮創建元類 。 基本上,這允許您定義一個僅在首次定義類時運行一次的函數。
始終會調用init方法,但是您可以創建另一個名為run()的方法,或者在創建對象后調用的方法,可選。
foo = ClassName()
foo.run() # replacement for __init__
foo2 = ClassName()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.