标题可能会产生误导 - 但我不能提出任何比“解决这个问题的优雅方法更好的方法”更好的方法。
我有一个获得回调的基类。回调的用法如下:
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()
时生成。这有什么优雅的方式?
编辑:假设我无法编辑基类。
答案 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()
上游的行为都会像首先执行条件而不是回调一样。