Python 3: How can object be instance of type?
在python 3中,
每个类是如何从另一个类派生的?
有实施细节吗?
我使用
1 2 3 4 5 | isinstance(object, type) Out[1]: True isinstance(type, object) Out[2]: True |
这是Python中的一个边缘案例:
- python中的所有内容都是一个对象,因此由于
object 是所有内容的基本类型,因此type (在python中是某种内容)是object 的一个实例。 - 由于
object 是万物的基型,object 也是一种类型,使object 成为type 的实例。
请注意,在Python中,这种关系是无法用自己的东西进行复制的。这是语言中的一个例外。
在实施方面,这两个名称分别由
当您使用
1 2 3 4 5 6 7 8 9 10 | type_is_subtype_base_chain(PyTypeObject *a, PyTypeObject *b) { do { if (a == b) return 1; a = a->tp_base; } while (a != NULL); return (b == &PyBaseObject_Type); } |
这基本上是在
至于为什么
1 2 3 4 5 | PyTypeObject PyBaseObject_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "object", /* tp_name */ sizeof(PyObject), /* tp_basicsize */ … |
号
这种关系实际上还有两个后果:
- 因为一切都是对象,所以
object 也是object 的实例:isinstance(object, object) 。 - 由于
PyType_Type 也与同一PyVarObject_HEAD_INIT 一起实施,type 也是一种类型:isinstance(type, type) 。