问题
学习一段时间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确实是所有类的终极父类
其实他们以及其他类的关系可以用下图表示:
彻底蒙圈了,不过这也符合自然规律,既然模拟自然实体世界的面向对象,那么就会存在先有鸡还是先有蛋的问题,对于编程来说一般没有太大问题,我们只要记住结论就可以。
结论
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