在 Python 中,开发人员的共同目标是重写实例上的特殊方法。然而,这通常是不可能的,因为特殊方法通常只在类本身上调用。
问题:
为了说明这个概念,请考虑以下代码片段:
class A(object): pass def __repr__(self): return "A" from types import MethodType a = A() a repr(a) setattr(a, "__repr__", MethodType(__repr__, a, a.__class__)) a repr(a)
如上所示,直接在实例上重写 __repr__ 不会产生预期的结果。 repr(a) 返回默认的类表示形式,而不是重写方法的返回值。
解决方案:
要在实例上实现重写特殊方法,您可以使用间接方法。将特殊方法定义为调用内部重写方法的包装器:
class A(object): def __repr__(self): return self._repr() def _repr(self): return object.__repr__(self)
现在,您可以通过覆盖 _repr() 来重写实例上的 __repr__ 。例如:
a = A() setattr(a, "_repr", lambda self: "Overridden") repr(a)
此更新的代码将输出覆盖的字符串表示形式。
以上是如何重写 Python 实例上的特殊方法?的详细内容。更多信息请关注PHP中文网其他相关文章!