Python 的 type与class 之争

我这里特别想一个困扰我多年的问题,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

文章目录
|