我有以下代碼:如何使用修飾器修改可變類變量?
class X(object):
items = []
class Y(X):
pass
class Z(X):
pass
我試圖創建一個裝飾,將一個對象只添加爲Y的「項目」列表中。所以下面的代碼,
@addItems
class Y(X):
pass
應該附加的東西(例如起見,假設整數1)Y.items但不能修改X.items,Z.items,或X的任何其他子類基本上,Y.items應該有items = [1]
,但X.items和Z.items應該都有items = []
。這是我創建了應該爲實現這一目標的裝飾功能定義:
def addItems(cls):
cls.items.append(1)
return cls
這不工作,雖然 - 當我使用的裝飾,它結束了修改X的「項目」列表和其他所有子類的X.什麼給?我知道Python中的類屬性在X的所有實例之間共享,但是,我不知道子類受到了影響。也許這種行爲只發生在可變屬性上?
什麼是實現我的目標的正確方法?
由於Y沒有'items'屬性,它會搜索超類並找到X.你想達到什麼目標? – Keith 2013-03-07 06:13:12