装饰回调

时间:2018-05-14 17:49:40

标签: python inheritance

标题可能会产生误导 - 但我不能提出任何比“解决这个问题的优雅方法更好的方法”更好的方法。

我有一个获得回调的基类。回调的用法如下:

class BaseClass(object):

    def __init__(self, callback, *args, **kwargs):
        self.callback = callback

    def useful_method(self):
        do_something()
        do_more_stuff()

        self.callback()

到目前为止一切顺利。现在我想从该类继承,我想做的是我想做一些与此类似的事情:

class MyClass(BaseClass):

    def useful_method(self):
        do_something()
        do_more_stuff()

        if self.condition and self.callback():
            self.condition = False

我希望避免在回调调用之前复制useful_method的整个主体。我无法在super中进行有条件的useful_method调用,因为条件仅在调用do_something()do_more_stuff()时生成。这有什么优雅的方式?

编辑:假设我无法编辑基类。

1 个答案:

答案 0 :(得分:4)

如果您无法修改基类,则可以将callback修改为条件,例如:

class MyClass(BaseClass):

    def __init__(self, callback, *args, **kwargs):
        self.condition = False  # initialize as False/True in dependence of your use case
        self._callback = callback
        super(MyClass, self).__init__(self.conditional_callback, *args, **kwargs)

    def conditional_callback(self):
        if self.condition and self._callback():
            self.condition = False

这样任何会调用self.callback() 上游的行为都会像首先执行条件而不是回调一样。