这个对我来说有点棘手。前些时候,我已经成功地用类似的方法覆盖了一个实例的方法:
def my_method(self, attr):
pass
instancemethod = type(self.method_to_overwrite)
self.method_to_overwrite = instancemethod(my_method, self, self.__class__)
这对我来说非常有效;但是现在我试图覆盖一个实例的__getattribute__()
函数,这对我来说不起作用,因为这个方法似乎是
有什么办法吗?我在method-wrapper
上找不到任何像样的Python文档。在
不能在实例级别重写特殊方法。For new-style classes, implicit invocations of special methods are only guaranteed to work correctly if defined on an object’s type, not in the object’s instance dictionary。在
我相信方法包装器是用C编写的方法的包装器
是否要在每个实例的基础上重写属性查找算法?在不知道你为什么要这么做的情况下,我会冒险猜测有一种更干净、更不复杂的方法来做你需要做的事情。如果您真的需要这样做,那么您需要在类上安装一个重定向
__getattribute__
处理程序,因为Python只在类上查找特殊方法,而忽略实例上定义的任何内容。在您还必须特别小心不要进入无限递归:
另外,如果要重写实例上的方法,则不需要自己实例化方法对象,可以在生成方法的函数上使用描述符协议,也可以只调用自参数。在
^{pr2}$相关问题 更多 >
编程相关推荐