是否有任何方法只有一次調用init()方法。或者當我從一個類創建一個對象時,如何禁用init()的調用?Python調用__init __()方法只有一次
1
A
回答
7
如果你想有一個單,那裏是永遠只能一個類的實例,那麼你可以創建一個裝飾像下面從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
0
init方法將始終被調用,但您可以創建另一個稱爲run()的方法或其他方法,您可以在創建對象後調用該方法。
foo = ClassName()
foo.run() # replacement for __init__
foo2 = ClassName()
2
有禁用__init__
沒有直接的方法,但也有一些方法來解決這個問題。其中之一是有一個標誌:
class Class:
_init_already = False
__init__(self):
if not Class._init_already:
...
Class._init_already = True
但是,這是醜陋的。你真的想完成什麼?
1
你不應該把任何東西放在你只想運行一次的__init__()
。每次創建一個類__init__()
的實例都會運行。
如果你想自定義你的課程的創建,你應該考慮創建一個metaclass。基本上,這可以讓你定義一個函數,該類只在第一次定義類時才運行一次。
相關問題
- 1. setInterval的調用方法(這)調用它只有一次
- 2. 方法onFocusChangeListener只調用一次
- 3. 初始方法只調用一次c#
- 4. iOS:只調用一次方法
- 5. WebSecurity.InitializeDatabaseConnection方法只能調用一次
- 6. VisualForce只調用一次getter方法
- 7. String Array只調用一次方法
- 8. 每次迭代只有一次調用方法
- 9. Python:在同一實例上多次調用__init __()
- 10. 爪哇 - 執行方法只有一次
- 11. 調用方法段控制器的段選擇只有一次
- 12. 的iAd:ADBannerViewDelegate方法只有viewDidLoad中後調用一次()
- 13. Three.js + TypeScript。爲什麼只有一次調用動畫的方法?
- 14. 只使用ScriptManager調用JavaScript方法調用一次
- 15. 一種方法調用方法一次
- 16. 只啓動一次方法
- 17. 我的方法運行兩次,它只被調用一次
- 18. 爲什麼Python不調用實例方法__init __()創建實例,而是調用類提供的__init __()來代替?
- 19. 方法一次又一次調用
- 20. JQuery只調用WCF Web方法幾次
- 21. 調用方法一次
- 22. 工廠方法只有一次
- 23. 在Python中添加__init __()方法
- 24. Python:未綁定的方法__init __()from import.class
- 25. Linq:調用Where和OrderBy的方法只有一次而不是兩次?
- 26. 只模擬一次方法
- 27. 確保一種方法的邏輯只被調用一次
- 28. 一次只能由一個線程調用的方法
- 29. 我該如何斷言一個方法只被調用一次?
- 30. 方式只有一次
你的意思是你想要一個單身? –
'__init__'將始終在對象構造時調用。這就是它的目的。如果你試圖讓它只被調用一次,那麼你的邏輯可能有一個缺陷。如果你發佈你正在努力實現的目標,我們可能會幫助你想出更正確的解決方案 –
當你創建一個類的實例時,__init__'的目的就是觸發。更具體地說明你要在這裏做什麼。 – Will