逃不出的循环,先有鸡还是先有蛋?object和type纠葛(python中的基类和元类)

本文深入探讨Python中基类(object)与元类(type)的关系,通过实验验证了object作为所有类的终极父类,而type用于创建类。同时解析了object和type互为实例的奇特现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

学习一段时间python了,一定会接触到两个词,基类和元类。
基类: 也叫父类,python中所有对象的终极父类是object,所有类都显式或隐式,直接或间接地继承了object类。
元类: 由于Python中一切都是对象,所以类本身也是对象,是被称之为元类的类创建出来的,即type类。
问题来了:
1.object类是一切类的终极父类,那么object类是不是type类的父类。、
2.type类是创建类的类,那么object类是不是type类创建的。

我彻底晕菜了吧,这就是先生鸡还是先有蛋的问题啊。为了搞清楚,我做了一下实验:

>>> object.__bases__
() #object的父类是空,说明object确实是所有类的终极父类
>>> object.__class__
<class 'type'> #object所属的类是type,说明object确实是type类创建的
>>> type.__class__
<class 'type'> #type所属的类是type,说明type类是自己创建的
>>> type.__bases__
(<class 'object'>,) #type的父类是object,说明object确实是所有类的终极父类

以上可以看出:
1.object的父类是空,说明object确实是所有类的终极父类
2.object所属的类是type,说明object确实是type类创建的
3.type所属的类是type,说明type类是自己创建的
4.type的父类是object,说明object确实是所有类的终极父类
其实他们以及其他类的关系可以用下图表示:
python之间的类

彻底蒙圈了,不过这也符合自然规律,既然模拟自然实体世界的面向对象,那么就会存在先有鸡还是先有蛋的问题,对于编程来说一般没有太大问题,我们只要记住结论就可以。

结论

object是用来继承的,type是用来创建类的。
记住这个就行了。

其他问题

在思考过程中,还进行了以下尝试:

>>> isinstance(object,object)
True
>>> isinstance(object,type)
True
>>> isinstance(type,object)
True
>>> isinstance(type,type)
True

从上面可以看出,object和type互为实例。这怎么理解,还望路过的各位高手留言解释为谢。

参考:https://www.cnblogs.com/FG123/p/9463707.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值