1
silkriver 2019-09-19 15:26:12 +08:00
type 是用来生成类的类,对象是 type 类或其子类的实例
你可以用 type.mro() 查看任意类型的“方法解析顺序”,这实际上就是类继承顺序,一直上溯到 object 类为止 >>> type.mro(type) [<class 'type'>, <class 'object'>] 这说明 type 的基类是 object 你可以用 type() 查看任意对象的“类型”,就是一个对象属于什么类型 >>> type(object) <class 'type'> 这说明 object 是由 type 生成的 |
2
wwqgtxx 2019-09-19 15:26:53 +08:00 via iPhone
这个问题基本上等同于 鸡生蛋蛋生鸡 的问题
实际上 object 和 type 在 cpython 中都是用 c 代码生成的,并没有什么先后关系,他们的依赖关系也是通过 c 代码人为规定的 |
6
silkriver 2019-09-19 16:04:33 +08:00
从历史上说,先有 type 类,后有 object 类…… 这个问题确实源远流长,只能去看 PEP 啦
|
7
XIVN1987 2019-09-19 16:16:08 +08:00
object 是所有类的基类,就像 JAVA 里面 Object 是所有类的基类一样,这个好理解吧,,
type 也是一个类,,那 object 是它的基类,,至少从原理上是说的通的 Python 不同于 JAVA 的一点是,,Python 中的类本身也是对象,,既然是对象,它就是实例,那它是哪个类的实例呢??是 type 这个类的实例(对象),,所以 object 这个类是 type 这个类的实例(对象) |
8
Jeeao OP @silkriver 这个疑惑放过了。理解成人为规定,说是这样子设计,是为了方便修改(可能最开始作者对设计的 py 没信心。哈哈哈哈)
|
9
xiaket 2019-09-19 16:23:08 +08:00
type 是最基本的 metaclass.
|
10
neoblackcap 2019-09-19 16:40:41 +08:00
type 是 metaclass,在以前的版本之前不是所有类都是新式类,所以会出现非 object 派生的类。type 跟 object 的确是不存在先后顺序的,类似的问题在 Java 界也出现,都是靠底层 VM 初始化的时候产生。
你可以简单的理解成,神说要有光,于是便有了光 |
11
robinlovemaggie 2019-09-19 19:44:50 +08:00 via Android
难道没用过 def 里套 class,class 又套 def ?
|
12
Jeeao OP @neoblackcap 最后一句点睛之笔 hhh
|
13
Jeeao OP @robinlovemaggie 答非所问了
|
14
sazima 2019-09-20 13:47:11 +08:00
In [1]: issubclass(type, object)
Out[1]: True |