Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.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
Python 为什么MyClass.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?_Python_Inheritance_Reflection_Multiple Inheritance_Method Resolution Order - Fatal编程技术网

Python 为什么MyClass.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?

Python 为什么MyClass.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?,python,inheritance,reflection,multiple-inheritance,method-resolution-order,Python,Inheritance,Reflection,Multiple Inheritance,Method Resolution Order,我希望能够调用“person.person.类”并返回“class person.person”,就像它对person对象所做的那样: >>> p = person.Person() >>> p.__class__ <class 'person.Person'> >>> person.Person.__class__ <class 'perframe.datatype.TypeSystemMeta'> 这里发生了什么

我希望能够调用“person.person.类”并返回“class person.person”,就像它对person对象所做的那样:

>>> p = person.Person()
>>> p.__class__
<class 'person.Person'>
>>> person.Person.__class__
<class 'perframe.datatype.TypeSystemMeta'>

这里发生了什么事?

只需引用person即可。person:

>>> p = person.Person() 
>>> p.__class__ 
<class 'person.Person'> 
>>> person.Person
<class 'person.Person'> 
p=person.person() >>>p.\uuuuu类 >>>人,人 关于Python类型系统的一个非常有用的资源是2.2+版Python类型系统的原始草案


在Python中,即使类也是对象,每个对象都是类的实例
Person
指的是“类对象”,它是
类型的一个实例。在本例中,游戏中有一个元类——非常令人困惑的元编程魔法,但是如果您想要介绍,请参阅。如果您声明一个
类Foo(object)
Foo.\uuuuu class\uuuuuuu是类型
(对于不从object继承的旧式类来说,情况就不同了,而且更容易混淆)。顺便说一句,这导致了更奇怪的事情,
类型似乎是它自身的一个实例。

要理解为什么会得到这样的结果,你必须理解元类是什么。要理解这一点,您必须理解如何在Python中创建类

编写
class
语句时,解释器会打开一个新名称空间,执行语句中的代码,并在代码运行后查看名称空间的状态。然后它计算出重要的细节(局部变量、类的名称等),并将其传递给内置类
type
。因此,
type
的实例就是我们通常所说的类,所以
type
是一个“元类”

重写元类时,告诉Python不要使用
type
创建新类。相反,它会将相同的内容传递给自定义类。这允许您覆盖
类型
中的默认值

因此,
person.person
是通过向元类传递一些参数创建的。特别是,它是该类的一个实例,因此它的
\uuuuu class\uuuu
就是元类

>>> p = person.Person() 
>>> p.__class__ 
<class 'person.Person'> 
>>> person.Person
<class 'person.Person'>