我正在使用python包(simpy),它提供了我需要的几个类。其中一个类称为Event,具有以下构造函数:
def __init__(self, env):
self.env = env
"""The :class:`~simpy.core.Environment` the event lives in."""
self.callbacks = []
"""List of functions that are called when the event is processed."""
self._value = PENDING
在代码中的许多不同位置,使用Event.callbacks.append
方法将对象添加到事件的回调中。
我需要的是一个新类(我称之为Zombie),它实际上是一个Event类,除了三个修改。首先,它应该包含一个额外的属性Zombie.reset_callbacks
和一个方法Zombie.reset()
,以便将Zombie.callbacks
重置为之前的状态(这就是我需要Zombie.reset_callbacks
属性的原因。所有这一切,我可以通过继承Event
。
但是,为了实现这一目标,我需要每次调用Zombie.callbacks.append(x)
,x
不仅会附加到Zombie.callbacks
,还会附加Zombie.reset_callbacks
。我一直在寻找装饰者,看看我是否可以做到这一点,但我没有看到隧道尽头的光。我目前觉得这是不可能的,或者我可能看错了方向。
在Python中这样的事情是否可能(改变类属性的追加行为)?如果是这样,怎么样?
Thanx提前为您付出的努力! 乙
答案 0 :(得分:1)
糟糕。误读了这个。如果您真的致力于维护此接口,则可以定义帮助程序类。
class SplitLists(object):
def __init__(*append_methods):
self._append_methods = append_methods
def append(self, value):
for method in self._append_methods:
method(value)
a = []
b = []
split_list = SplitLists(a.append, b.append)
split_list.append(1)
a # [1]
b # [1]
class Zombie(Event):
def __init__(self, *args, **kwargs):
super(Zombie, self).__init__(*args, **kwargs)
self._real_callbacks = []
self._reset_callbacks = []
self.callbacks = SplitLists(self._real_callbacks.append,
self._reset_callbacks.append)