在Python中,甚至类都是对象,每个对象都是类的实例。Person引用“类对象”,它是type的一个实例。在本例中,有一个元类在play-highly-flusing metaprogramming magic中,但是如果您需要介绍,请参见What is a metaclass in Python?。如果您声明一个class Foo(object),Foo.__class__ is type(对于不从对象继承的旧式类来说,情况有所不同,更加令人困惑)。顺便说一句,这导致更奇怪的是{}似乎是它自己的一个实例。在
为了理解你为什么会得到结果,你必须理解元类是什么。要理解这一点,您必须了解如何在Python中创建类。在
当您编写
class
语句时,解释器会打开一个新的名称空间,执行语句中的代码,并在代码运行后查看名称空间的状态。然后计算出重要的细节(局部变量、类的名称,…)并将其传递给内置类type
。因此,type
的实例就是我们通常所说的类,因此type
是一个“元类”。在重写元类时,告诉Python不要使用
type
来创建新类。相反,它将把相同的东西传递给一个自定义类。这允许您覆盖type
中的默认值。在因此,
person.Person
是通过向元类传递一些参数来创建的。特别是,它是该类的一个实例,因此它的__class__
就是元类!在在Python中,甚至类都是对象,每个对象都是类的实例。}似乎是它自己的一个实例。在
Person
引用“类对象”,它是type
的一个实例。在本例中,有一个元类在play-highly-flusing metaprogramming magic中,但是如果您需要介绍,请参见What is a metaclass in Python?。如果您声明一个class Foo(object)
,Foo.__class__ is type
(对于不从对象继承的旧式类来说,情况有所不同,更加令人困惑)。顺便说一句,这导致更奇怪的是{只要引用人。人公司名称:
关于Python类型系统的一个非常有用的资源是Python类型系统2.2+版本的原始草案。在
http://www.python.org/download/releases/2.2/descrintro/
相关问题 更多 >
编程相关推荐