我有以下代码:
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 的任何其他子类。基本上,Y.items 应该只有items = [1]
X.items 和 Z .items 都应该有items = []
. 这是我创建的应该实现该目标的装饰器函数定义:
def addItems(cls):
cls.items.append(1)
return cls
但这不起作用 - 当我使用装饰器时,它最终会修改 X 和 X 的所有其他子类的“项目”列表。什么给出了?我知道 Python 中的类属性在 X 的所有实例之间共享,但是,我不知道子类受到影响。也许这种行为只发生在可变属性上?
实现我的目标的正确方法是什么?