我正在阅读这篇关于元类的优秀文章什么是 Python 中的元类?. 接受的答案显示了如何使用type
以下签名创建类。
type(name of the class,
tuple of the parent class (for inheritance, can be empty),
dictionary containing attributes names and values)
这让我想知道是谁创建了对象类。对象类也是由type
类创建的吗?
我正在阅读这篇关于元类的优秀文章什么是 Python 中的元类?. 接受的答案显示了如何使用type
以下签名创建类。
type(name of the class,
tuple of the parent class (for inheritance, can be empty),
dictionary containing attributes names and values)
这让我想知道是谁创建了对象类。对象类也是由type
类创建的吗?
理论上你是对的。object
是 的一个实例type
。但是,当您检查type
的基类时,您会发现它type
继承自object
! 怎么会这样?
事实是,这在 Python 解释器中是硬编码的。两者object
都type
给出;两者实际上都没有以任何方式参与创建另一个。
在对象/类型层次结构的这些稀有级别上要记住的主要事情是,类似的东西object
根本type
不是在 .py 文件中创建的,它们是在 C 代码中静态创建的,以及 CPython 的其他基础基础。所以它们不一定是用任何特定的 Python 代码“创建”的。
type
有点 - 嗯,不知道如何描述它 -语言的怪人。
它可以用来做 type(someobj) 或用作某种构造函数(带有 3 个参数)来创建从带有实例的基类派生的新类型。正如您在元类中看到的那样 - 制作工厂类很有用 - 虽然,恕我直言,除非您真的想太聪明,否则使用类装饰器会使这在 2.6+ 中稍微容易一些