Python 为什么MyClass.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?
我希望能够调用“person.person.类”并返回“class person.person”,就像它对person对象所做的那样: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'> 这里发生了什么
>>> 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'>