猴子补丁__del__到新功能
|
为了特定的调试目的,我想包装任意对象的del函数以执行额外的任务,例如将对象的最后一个值写入文件。
理想情况下,我想写
猴子(x)
它应该表示删除x时将打印x的最终值
现在我知道del是一个类方法。因此,以下是一个开始:
class Test:
def __str__(self):
return \"Test\"
def p(self):
print(str(self))
def monkey(x):
x.__class__.__del__=p
a=Test()
monkey(a)
del a
但是,如果我只想猴子特定的对象,我想我需要动态地将它们的类重写为一个新的类吗?此外,我仍然需要执行此操作,因为我无法访问内置类型的del?
有人知道如何实现吗?
没有找到相关结果
已邀请:
4 个回复
稍惮
,
,
等特殊的“双下划线”方法进行猴子修补,但除非直接调用它们,否则它们将被忽略(例如,如果您使用Omnifarious \'答案:
不会打印任何东西,but5ѭ会打印出来。 如果仍然想在运行时猴子修补类
的单个实例
,解决方案是动态创建派生自
的类
,然后将
的类更改为新创建的
。是的,这是可能的,并且ѭ6behave的行为就好像什么都没有改变一样,只是现在它包括了猴子修补方法。 这是基于我为另一个问题编写的泛型函数的解决方案: Python方法解析之谜
补蹲农界维
方法(然后,您唯一需要做的就是在构造对象时覆盖类)。 或者您可以使用
内置方法。
舜辉
同样,
也不保证完全被调用。 另外,我已经在这里(德语)回答了您的问题。
赣借
不会传递给您用这种方式修补的函数,但是
可以轻松地对其进行补救。 例: