python - 装饰回调
问题描述
标题可能具有误导性 - 但我想不出比“解决这个问题的优雅方法是什么?”更好的方法。
我有一个得到回调的基类。回调的使用方式如下:
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()
。有什么优雅的方法可以解决这个问题?
编辑:假设我不能编辑基类。
解决方案
如果你不能修改基类,你可以修改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()
上游的东西都会像它首先执行条件而不是回调一样。
推荐阅读
- docker - Docker、Traefik 2.2 和默认证书
- plot - 在任何网站都找不到答案
- java - JavaFX 将 mp3 文件导入 ListView
- php - 向电话号码添加自定义掩码
- loopback - 如何在 Loopback 4 中实现事务
- google-sheets-api - 使用 Google 表格 V4 克隆 Google 电子表格并授予队友访问权限
- libvlc - 无法让 LibVlcSharp UWP 示例与本地媒体一起使用
- node.js - 绑定类型“signalR”未注册
- python - 如何从 HTML 用户输入中获取数据到 python 文件
- youtube-api - 如何增加每个用户对 Youtube Data API 的最大请求数