即使原始的repr方法已被覆盖,python仍在哪里获取仍会产生'foo'的repr?
class Test(object):
def __init__(self, name, number_array):
self.name = name
self.number_array = number_array
def __repr__(self):
return str(self.name)
def custom_repr(self):
return str(self.name*4)
>>> A = Test('foo', [1,2])
>>> A
foo
>>> A.__repr__ = custom_repr.__get__(A, A.__class__)
>>>A.__repr__()
foofoofoofoo
>>>A
foo
对于自定义类,只有保证在对象的类型上定义了特殊方法的隐式调用,才能保证其正常工作,而不是在对象的实例字典中定义……为了出于正确性而绕过任何实例属性,隐式特殊方法查找通常也绕过
__getattribute__()
甚至对象的元类的方法
(如果您对此感兴趣,则我摘录的部分将解释其背后的原理。)
Python并未确切记录何时实现应该或不应该在类型上查找方法。实际上,它所记录的全部内容是,实现可能会或可能不会查看实例以进行特殊方法查找,因此您不应指望任何一个。
但是,从测试结果中可以猜出,在CPython实现中,__repr__
是在类型上查找的功能之一。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句