Python3对象中如何定义mro?
更新------------------Python3对象中如何定义mro?,python,python-3.x,Python,Python 3.x,更新------------------ 对象是类型的实例,但同时,对象也是类型的基类。而类型是对象的一个实例。我真的很困惑。这完全不合逻辑。python为什么这样做 >>> isinstance(object,type) True >>> isinstance(type,object) True >>> type.__bases__ (<class 'object'>,) 都涉及到了 解析对象.mro时,解释器首先在对象中查找
对象
是类型
的实例,但同时,对象
也是类型
的基类。而类型
是对象
的一个实例。我真的很困惑。这完全不合逻辑。python为什么这样做
>>> isinstance(object,type)
True
>>> isinstance(type,object)
True
>>> type.__bases__
(<class 'object'>,)
都涉及到了
解析对象.mro
时,解释器首先在对象中查找'mro'
>>> object.__dict__['mro']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'mro'
>>> type(object).__dict__['mro']
<method 'mro' of 'type' objects>
此对象是一个描述符,因为它有一个\uuu get\uu
方法。因此,解释器调用\uuu get\uu
方法来获取object.mro
的实际值
根据文档,您可能会认为,由于object
是一个类,它会调用\uuuu get\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
>>> type(object).__dict__['mro'].__get__(object, type(object))
<built-in method mro of type object at 0x1047d2ae0>
>>>类型(对象)。\uuuuuu dict\uuuuuu['mro']。\uuuuuuu get\uuuuuuuuuuu(对象,类型(对象))
要确认结果是否符合我们的要求:
>>> type(object).__dict__['mro'].__get__(object, type(object)) == object.mro
True
>>> type(object).__dict__['mro'].__get__(object, type(object))()
[<class 'object'>]
>>>类型(对象)。\uuuuu dict\uuuuu['mro']。\uuuuu get\uuuuu(对象,类型(对象))==object.mro
真的
>>>类型(对象)。\uuuuu dict\uuu['mro']。\uuuuu get\uuuuuu(对象,类型(对象))()
[]
因为类属性总是可以从实例访问。@Ignacio Vazquez Abrams谢谢,但仍然confusing@IgnacioVazquez-艾布拉姆斯,这还不是全部,type.mro!=object.mro
@tcpiper如果你想让人们看到并回答你的更新,你可能应该把它作为一个单独的问题发布。
>>> type(object).__dict__['mro'].__get__(object, type(object)) == object.mro
True
>>> type(object).__dict__['mro'].__get__(object, type(object))()
[<class 'object'>]