Python进阶之路(一),所谓的类不过如此

本文深入解析了编程中类型与实例的概念,阐述了类的描述、实例的唯一ID、类型判断、继承关系及类型对象的本质。通过具体示例,如Python中的int、float和str类型,解释了如何使用type和isinstance函数进行类型操作。

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

类的描述

我们习惯于将生物分为动物,植物,进而又有猫科,犬科等细分.通过对个体的研究,归纳其共同特征,抽象成了描述种类模板,有了这些模板后,可据此创建大量行为类似的个体,所以分类是一个基础工程

在专业术语上,我们将族群或类别乘坐 类型(class) 将个体称之为实例(instance). 类型持有同组个体的共同形态和共享状态,而实例仅仅保存只有特性即可.如此在内存空间布局上才是最高效的.

以张三,李四为例. 在创建抽象模型时,人类的共同特征,诸如:吃饭,走路等,统统放在"人类"这个类型里面,个体只是保存姓名,性别,胖瘦,肤色这些即可.如下图所示

在这里插入图片描述

1.存活的实例对象都有"唯一"的ID值

In [1]: id(123) 
 
Out[1]: 10914304

In [2]: id('123') 
 
Out[2]: 140705948508032

不同的Python实现使用不同算法,Cpython用内存地址作为ID值,这意味着它只能保证在某个时间,在存活对象里面是唯一的,他不能保证整个生命周期内的唯一性,因为内存地址会被复用,因此ID不适合作为全局身份标识.

3.可以用type返回实例所属的类型.

In [6]: type(1) 
 
Out[6]: int

In [7]: type(1.2) 
 
Out[7]: float

In [8]: type("hello") 
 
Out[8]: str

4.要判断实例是否属于特定类型,可以使用isinstance 函数

In [9]: isinstance(1,int) 
 
Out[9]: True

In [10]: isinstance(1,float) 
 
Out[10]: False

5. 类型之间的继承关系

类型之间可构成继承关系,就想老虎继承自猫科,而猫科又继承与哺乳动物,网上还有更顶层的类型.继承关系让类型拥有其所有祖先的特性.因为历史原因,Python允许多继承,可就是说可以有多个父类,好像是人类同时拥有父族,母族遗传特征.详细如图所示
在这里插入图片描述

任何类型都有其祖先类型的子类,同样,对象也可以判定为其祖先类型的实例,(涉及到面向对象中的多态有关.后面再做详细概述)

事实上,所有类型都有个共同的祖先类 Object,他为所有类型提供原始模板,以及系统所需要的基本操作方式.

In [11]: isinstance(int,object) 
 
Out[11]: True

类型虽然是抽象族群概念,但是在实现上也只是一个普通的对象实例.区别在于,所有的类型都是type创建的,这与继承无关

In [12]: id(int) 
 
Out[12]: 10283392

In [13]: type(int) 
 
Out[13]: type

In [14]: isinstance(int,type) 
 
Out[14]: True

怎么理解呢?单单从类型对象而言,其本质就是用来储存方式和字段成员的特殊容易,用同一份设计来实现才是正常思路

这就好比扑克牌,就单单从玩法逻辑上看,JQKA等都有不同含义,但是从材质上面看,他们完全相同,没道理用不同的材料去制作这些内容不同的卡片.同理继承也只是说明两个类型在逻辑上存在关联关系,如此,所有类型对象都属于 type 实例就很好理解了.

无论是编码,还是设计,都要有正确区分逻辑与实现的差异

In [15]: type(int) 
 
Out[15]: type

In [16]: type(str) 
 
Out[16]: type

In [17]: type(type) 
 
Out[17]: type

当然,类型对象属于创建者这样的特殊存在,默认情况下,他们由解释器首次载入时自动生成,生命周期与进程相同,且仅有一个实例.

In [18]: type(100) is type(1234) is int # 指向同一类对象
 
Out[18]: True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值