对于从 dict 继承的类,为什么dict.__str__
当 dict 位于类的 MRO 中较早的位置时不能使用 str()?
Python 3.10.12 (main, Sep 11 2024, 15:47:36) [GCC 11.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class A:
... def __str__(self):
... return "A"
...
>>> class B(dict, A):
... pass
...
>>> B.__mro__
(<class '__main__.B'>, <class 'dict'>, <class '__main__.A'>, <class 'object'>)
>>> str(B())
'A'
>>> str(dict())
'{}'
>>>
当调用 str(B()) 时,为什么dict.__str__
不优先调用 而不是A.__str__
?
这是否与 dict 具有 slot_wrapper 而不是函数有某种关系?
>>> dict.__str__
<slot wrapper '__str__' of 'object' objects>
>>> A.__str__
<function A.__str__ at 0x75be4ea8a0e0>
>>> B.__str__
<function A.__str__ at 0x75be4ea8a0e0>
dict.__str__
继承自object
,而非由 实现dict
。(实现基本上是return repr(self)
- 它不是dict
- 特定的。)dict
可能A
在之前出现B.__mro__
,但A
在 之前出现object
,因此A
的__str__
实现出现在object
的实现之前。