我有這樣的(例子)代碼:類時滯靜態類成員初始化
init()
class A:
foo = bar()
def __init__(self):
print(A.foo)
的問題是,該功能bar()
拒絕工作,除非init()
已經首先被調用。什麼是一個很好的pythonesque解決方案這個問題?
在我的具體情況init()
是第三方,不能進行調整,被稱爲在不同的文件比A
定義。
我有這樣的(例子)代碼:類時滯靜態類成員初始化
init()
class A:
foo = bar()
def __init__(self):
print(A.foo)
的問題是,該功能bar()
拒絕工作,除非init()
已經首先被調用。什麼是一個很好的pythonesque解決方案這個問題?
在我的具體情況init()
是第三方,不能進行調整,被稱爲在不同的文件比A
定義。
喜歡這個?
class A:
foo = None
def __init__(self):
if A.foo is None:
A.foo = bar()
print(A.foo)
你也可以移動的if
聲明A.__new__()
如果你不知道A.__init__()
將被調用(如顯式調用構造函數之前取儲存的A
對象時)。
順便說一句,如果你需要,直到'A'初始化延遲初始化,然後'foo'是不是真的靜態的,而是一個單身。 –
foo真的有必要成爲一個類屬性嗎?我懷疑你最好重新設計這部分設計。 –
那麼,這個類是一個'Character',靜態屬性是'Character.sprite'。這是所有'Character'實例中的一個常見事物,並且密切相關,因此靜態成員屬性看起來最好。我使用的庫在庫初始化之前無法從文件加載精靈。 – orlp