次のコードがあります。
class X(object):
items = []
class Y(X):
pass
class Z(X):
pass
Y の「アイテム」リストにのみオブジェクトを追加するデコレータを作成しようとしています。したがって、次のコード、
@addItems
class Y(X):
pass
Y.items に何か (たとえば、整数 1 としましょう) を追加する必要がありますが、X.items、Z.items、または X の他のサブクラスを変更しないでくださいitems = [1]
。 .items の両方が必要items = []
です。これは、その目標を達成するために作成したデコレーター関数の定義です。
def addItems(cls):
cls.items.append(1)
return cls
ただし、これは機能しません。デコレータを使用すると、X および X の他のすべてのサブクラスの「アイテム」リストが変更されます。Python のクラス属性が X のすべてのインスタンスで共有されていることは知っていますが、サブクラスが影響を受けることは知りませんでした。おそらく、この動作は変更可能な属性に対してのみ発生しますか?
私の目標を達成するための正しい方法は何ですか?