Python:为什么动态添加的__repr__方法不会覆盖默认值

用户名

即使原始的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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么多次调用该函数时会覆盖为Python 3函数设置的默认值?

来自分类Dev

为什么 sys.stdout(在 python 中)没有恢复到默认值的默认方法

来自分类Dev

在C#中,为什么子类字段的默认值不覆盖超类字段的默认值?

来自分类Dev

在C#中,为什么子类字段的默认值不覆盖超类字段的默认值?

来自分类Dev

骨干模型默认值不会被模型数据覆盖

来自分类Dev

为什么需要默认值呢?

来自分类Dev

为什么nullglob不是默认值?

来自分类Dev

为什么可选常量不会自动具有默认值nil

来自分类Dev

当窗口失去对Win32的关注时,为什么覆盖的非客户区域显示默认值?

来自分类Dev

为什么python Queue 类没有定义__repr__ 或__str__?

来自分类Dev

从super()运行方法时,为什么字段未初始化为非默认值?

来自分类Dev

为什么在实现中允许使用与在接口上定义的默认值不同的默认值?

来自分类Dev

为什么RandomForestClassifier中的max_features的默认值与RandomForestRegressor中的默认值不同?

来自分类Dev

为什么即使子类化时函数会传递给函数的协议默认值也不会更改?

来自分类Dev

为什么不使用avro默认值?(使用avro-python)

来自分类Dev

python 类型对象的默认 __repr__ 是如何实现的?

来自分类Dev

为什么在访问结构时需要默认值?

来自分类Dev

Java:为什么未使用XX:SurvivorRatio的默认值?

来自分类Dev

为什么要推动匹配Git中的默认值?

来自分类Dev

为什么out参数没有默认值?

来自分类Dev

使用:=时,为什么with = TRUE是默认值?

来自分类Dev

为什么我的argparse不显示默认值?

来自分类Dev

为什么我的DropDownListFor的默认值无法正常工作?

来自分类Dev

TEXT列的MySQL默认值行为异常,为什么?

来自分类Dev

为什么constexpr不是所有函数的默认值?

来自分类Dev

为什么constexpr不能只是默认值?

来自分类Dev

为什么FreezeGun不使用SQLAlchemy默认值?

来自分类Dev

为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

来自分类Dev

为什么可选参数的默认值必须为常数?

Related 相关文章

  1. 1

    为什么多次调用该函数时会覆盖为Python 3函数设置的默认值?

  2. 2

    为什么 sys.stdout(在 python 中)没有恢复到默认值的默认方法

  3. 3

    在C#中,为什么子类字段的默认值不覆盖超类字段的默认值?

  4. 4

    在C#中,为什么子类字段的默认值不覆盖超类字段的默认值?

  5. 5

    骨干模型默认值不会被模型数据覆盖

  6. 6

    为什么需要默认值呢?

  7. 7

    为什么nullglob不是默认值?

  8. 8

    为什么可选常量不会自动具有默认值nil

  9. 9

    当窗口失去对Win32的关注时,为什么覆盖的非客户区域显示默认值?

  10. 10

    为什么python Queue 类没有定义__repr__ 或__str__?

  11. 11

    从super()运行方法时,为什么字段未初始化为非默认值?

  12. 12

    为什么在实现中允许使用与在接口上定义的默认值不同的默认值?

  13. 13

    为什么RandomForestClassifier中的max_features的默认值与RandomForestRegressor中的默认值不同?

  14. 14

    为什么即使子类化时函数会传递给函数的协议默认值也不会更改?

  15. 15

    为什么不使用avro默认值?(使用avro-python)

  16. 16

    python 类型对象的默认 __repr__ 是如何实现的?

  17. 17

    为什么在访问结构时需要默认值?

  18. 18

    Java:为什么未使用XX:SurvivorRatio的默认值?

  19. 19

    为什么要推动匹配Git中的默认值?

  20. 20

    为什么out参数没有默认值?

  21. 21

    使用:=时,为什么with = TRUE是默认值?

  22. 22

    为什么我的argparse不显示默认值?

  23. 23

    为什么我的DropDownListFor的默认值无法正常工作?

  24. 24

    TEXT列的MySQL默认值行为异常,为什么?

  25. 25

    为什么constexpr不是所有函数的默认值?

  26. 26

    为什么constexpr不能只是默认值?

  27. 27

    为什么FreezeGun不使用SQLAlchemy默认值?

  28. 28

    为什么Mockito verifyNoMoreInteractions的Scala默认值有问题

  29. 29

    为什么可选参数的默认值必须为常数?

热门标签

归档