我正在尝试找到创建执行以下操作的类装饰器的最佳方法:
- 将一些函数注入装饰类
__init__
在调用装饰类之后强制调用这些函数之一
目前,我只是保存对“原始”__init__
方法的引用,并将其替换为__init__
调用原始方法和附加函数的方法。它看起来类似于:
orig_init = cls.__init__
def new_init(self, *args, **kwargs):
"""
'Extend' wrapped class' __init__ so we can attach to all signals
automatically
"""
orig_init(self, *args, **kwargs)
self._debugSignals()
cls.__init__ = new_init
有没有更好的方法来“增强”原件__init__
或在其他地方注入我的电话?我真正需要的只是self._debugSignals()
在创建对象后的某个时间调用我。我也希望它自动发生,这就是为什么我认为 after__init__
是一个好地方。
额外的杂项。装饰笔记
值得一提的是这个装饰器的一些背景。你可以在这里找到完整的代码。装饰器的重点是自动附加到任何 PyQt 信号并在它们发出时打印。当我装饰自己的子类时,装饰器工作正常QtCore.QObject
,但是我最近一直在尝试自动装饰所有 QObject 子类。
我想在应用程序中有一个“调试”模式,我可以自动打印所有信号,以确保事情按照我的预期进行。我确信这会导致大量调试,但我仍然想看看发生了什么。
问题是我当前版本的装饰器在替换QtCore.QObject.__init__
. 我试过调试这个,但代码都是 SIP 生成的,我没有太多经验。
所以,我想知道是否有一种更安全、更 Python 的方式来在之后注入函数调用__init__
并希望避免段错误。