我是Python的新手,來自Perl世界。在python中使類數據可繼承的正確方法是什麼?
我想確定什麼是有關存儲和訪問類數據的最佳做法,以便它可以被繼承並可能由子類擴展。閱讀Python 2.7文檔(我實際上堅持使用2.6),潛入Python和過去的問題,這個問題的答案並不清楚。
在Python中的僞代碼類似...
class baseClass:
'DataMap' = {
'key1': 'val1',
'key2': 'val2',
'key3': 'val2',
}
class subClass1(baseClass): # has access to DataMap
def myfunc:
...
if DataMap[x] == 'val2':
print 'foo' # if x equals 'key2' according to the data map
y = DataMap['key4'] # error!
...
class subClass2(baseClass): # appends values to base DataMap
DataMap['key4'] = 'val4'
def myfunc:
...
if DataMap[x] == 'val4':
print 'foo' # if x equals 'key4' according to the data map
elif DataMap[x] == 'val2':
print 'bar' # if x equals 'key2' according to the data map
...
我上面寫的是在直接一流的數據訪問有點頭腦的Perl是普遍的,主要是鼓勵,因爲開銷調用的方法。我感覺這種方法雖然不是很pythonic,但我想要一個理智的檢查。
應該DataMap,雖然不可變的一旦編譯,駐留在一個類函數,其中subClass1將通過類方法獲得該數據時,繼承baseClass和subClass2可以重寫相同的方法來追加/合併其數據映射與基地?
您的見解和智慧是值得讚賞的。
是的,你的第一個例子並不如我想象的工作。我正在尋找具有該類所有對象共享的不可變數據集。你的第二個例子是爲每個對象實例創建一個不需要的數據副本。 – tima