Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3对象中如何定义mro?_Python_Python 3.x - Fatal编程技术网

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'>]