为什么MyClass .__ class__返回的值不同于MyClass().__ class__?

esp*_*eed 0 python reflection inheritance multiple-inheritance method-resolution-order

我希望能够打电话给'person.Person. "并取回'类person.Person’,像它用于一个Person对象:

>>> p = person.Person()
>>> p.__class__
<class 'person.Person'>
>>> person.Person.__class__
<class 'perframe.datatype.TypeSystemMeta'>
Run Code Online (Sandbox Code Playgroud)

这是Person继承树......

class TypeSystem(object):
    __metaclass__ = TypeSystemMeta    

class Model(TypeSystem):
    pass    

class Node(Vertex,Model):
    pass

class Person(Node):
    pass
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

小智 5

在Python中,甚至类都是对象,每个对象都是类的实例.Person指的是"类对象",它是一个实例type.在这种情况下,游戏中有一个元类 - 高度混乱的元编程魔术,但如果你想要一个介绍,请参阅Python中的元类是什么?.如果你声明a class Foo(object),Foo.__class__ is type(对于不从对象继承的旧式classe,事情会有所不同,而且更加混乱).顺便说一下,这会导致更加奇怪,因为这type似乎是一个例子.