首页 > 解决方案 > 装饰回调

问题描述

标题可能具有误导性 - 但我想不出比“解决这个问题的优雅方法是什么?”更好的方法。

我有一个得到回调的基类。回调的使用方式如下:

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()and的调用中生成do_more_stuff()。有什么优雅的方法可以解决这个问题?

编辑:假设我不能编辑基类。

标签: pythoninheritance

解决方案


如果你不能修改基类,你可以修改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() 上游的东西都会像它首先执行条件而不是回调一样。


推荐阅读