Python 的 type与class 之争
Inhalte
我这里特别想一个困扰我多年的问题,type object class 这三个到底是个什么关系??写这篇文章的时候我特地去好好学习了一下,下面分享我的一些体会
一、我需要再次强调python中一切皆对象
type(类型)是对象
class(类)是对象
object(对象)还是对象
都是对象!!
二、父与子 AND 类型与实例
1.父与子
父与子的关系只存在于类这个对象之间,也就是我们所说的父类和子类,子类继承于父类拥有父类的特征但也允许有自己的特征。
2.类型与实例
这个就比较特殊,类型就是我们所说的type ,实例就是object 但同时object又是所有类的超类凌驾于所有的类和对象之上,而type是一切类的类型,所有的类都是type的实例,当然也包括object。
下面我们来证明一下这个观点:
测试一:
>>> object ---->自己是object
<type 'object'>
>>> type(object) ---->object的类型是type,时type的一个实例
<type 'type'>
>>> object.__class__ ----> __class__ 和 type() 效果相同
<type 'type'>
>>> object.__bases__ ----> object 是所有类的父类,不存在基类
()
测试二:
>>> type ----> 自己是 type
<type 'type'>
>>> type(type) ----> type 是一切类的类型,包括他自己
<type 'type'>
>>> type.__class__ ----> __class__ 和 type()效果相同
<type 'type'>
>>> type.__bases__ ----> type 的基类依然是object
(<type 'object'>,)
三、类型和非类型
1.在python中类和类型已经不可分,我们可以将其统称为类对象,这一点我们其实已经可以从上面的__class__
和 type() 效果相同中略知一二
2.Python 中目前可分的就是类型和非类型,虽然他们都是对象,但是他们有着本质的区别就是,类型是可以被继承的,而非类型不能被继承。就比如: int 是一个类型 而 2 是这个类型的实例 虽然他们都是对象,但是2却没有被继承的能力,继承了也没有任何的意义
如何判断是否是类型?
如果一个对象的类型是 <class 'type'>
那他就是类型了。
参考链接:
https://www.cnblogs.com/busui/p/7283137.html?utm_source=itdadao&utm_medium=referral