2016-02-09 60 views
2

我有一個類Foo,包含一個類變量size。 我想在第一次創建Foo對象時計算大小,並將其用於所有後續對象,但不會再次計算大小。對於包含Foo類中一切的緣故,我想出了這個代碼:改變類變量:好的做法還是不行? (Python)

class Foo(object): 
    size = -1 
    def __init__(self,args): 
     if Foo.size < 0: 
      Foo.size = some_calculation(args) 

在我小的考驗,但我想要做什麼。但是,這是否被認爲是良好做法?有沒有更好的方法來做到這一點?

+4

可以'Foo.size'計算出來是否爲'<0'?如果是這樣,你可能想初始化爲'None'並檢查'如果Foo.size是None:' – Jkdc

+3

類變量當然有其用途,特別是在所有實例共享數據的情況下...所以,如果這樣做你想做的事情,它適合用例,沒關係。 – deceze

+1

考慮一下,如果你這樣做,有些時候你可能會在任何對象初始化之前在代碼的其他地方爲'Foo.size'跳水,並且你會得到一個'AttributeError'。爲了避免這個問題,可以使用'try'塊,或者將'Foo.size'初始化爲'None'或者'0'作爲類定義的一部分。 –

回答

1

這絕不是一個詳盡的答案,但我想指出一些我無法在評論中輕鬆描述的東西。

正如評論中所說,你的方法沒有任何問題。 這取決於你想要做什麼。

讓我指出,如果將來您最終定義了一個根據不同的規則/初始值計算size的子類,那麼通過self.來引用它(而不是通過類到達它'name)

eg

>>> class A: 
... size=1 
... def printsize(self): 
... print(self.size) 
... 
>>> class B(A): 
... size=2 
... 
>>> a=B() 
>>> a.printsize() 
2 
+0

謝謝,我會牢記這一點 – Cantfindname

相關問題