0

我正在使用一个 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 中是否有可能(更改类属性的附加行为)?如果是这样,怎么办?

提前感谢您的努力!B.

4

1 回答 1

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)
于 2015-04-07T22:46:54.607 回答