Logo

郎哥编程

类与对象

2020-09-05 229

类与对象的关系

在Python语言中,数据都被抽象为类,类的实例称为对象。

01.png

下面的案例,演示了类和对象的关系。

num = 12

这是一条变量赋值语句,创建变量num,将数值12赋值给num。我们来看Python执行这条语句的过程。

因为12是一个整数,整数对应数据类int类。Python解释器会加载int类到内存并初始化为12,int类初始化的过程也称为类的实例化,实例化的类被称为对象,对象的内存地址赋值给变量num,此时变量num指向了实例化后的int对象,变量名称num也可以称为对象num。

02.png

每个对象都有各自的编号、类型和值。一个对象被创建后,编号不会改变,也可以把编号理解为该对象在内存的地址。内置函数type可以查看对象的类型,内置函数id可以查看对象的编号(对象的编号也称为对象的id值),对象的值可以使用内置函数print查看。

案例1:查看int对象的编号、类型和值

03.png

在案例01中,<class ‘int’>表示num的类型是一个类,该类是int类。在后面的课程中,整数类型是指int类,整数对象是指int类的实例化对象。

认识类

类是对事物的抽象,抽象是从众多的同类事物中抽取出具有共同特征的过程及方法。

例如:苹果、香蕉、葡萄等都属于水果类别,假如我们要给水果找出共同特点,就需要抽取(抽象)苹果、香蕉、葡萄的共同特征,舍弃其不同的特征。一般说来苹果、香蕉、葡萄都具有汁液多、糖分多、并且还含有挥发性芳香物质、可以生食等特点。具备上述特点的一般都可以归类为水果。

04.png

抽象就是对同类事物的概括和归纳,前面例子的苹果、香蕉、葡萄是现实中的事物,人们在品尝的同时,抽取它们共有的特点,并起了一个新名称水果,来概括和归纳具有苹果、香蕉、葡萄共同特点的所有事物。例如:生梨、桃子也具备苹果、香蕉、葡萄的共同特点,因此生梨和桃子也可以归类为水果。

回到编程语言,水果可以称之为类,而苹果、香蕉、葡萄可以称之为类实例化的对象。类是抽象出来的事物,现实生活中并不存在,例如水果,水果是人们赋予具有苹果、香蕉、葡萄等共同特点的名称,不单指某一事物;对象是指具体的实物或概念,例如苹果、香蕉、葡萄等对象是实物。

05.png

既然类是对同类事物的概括和归纳,类就具有同类事物的属性和行为。

属性是事物的特征,例如:水果类有汁液多、糖分多、含有挥发性芳香物质等属性;Python提供的int类有编号、类型、值等属性。

事物的行为在类中也称为方法。例如:水果类的开花、落果、膨大、成熟等方法;Python提供的int类有bit_length()、to_bytes()等方法。

06.png

在Python中,类被实例化为对象后,就可以调用类的方法了。因为对象是类的实例,也可以称为调用对象的方法。

调用对象方法的语法如下:

对象名.方法名(参数)

案例2:调用整数对象的方法

整数对象的bit_length()方法,返回int对象的值以二进制表示所需要的位数。内置函数bin返回一个字符串,该函数将一个整数转变为一个前缀为“0b”的二进制字符串。

bin函数声明: 

bin(x)

其中,bin是函数名称,x是传入的参数,类型是整数类型。

07.png

在案例02中,使用bin函数输出了整数对象num值的二进制字符串“0b1100”,“0b”是前缀字符,num值的二进制位数是4位,然后调用整数对象num的bit_length()方法获取num值的二进制位数。

序列对象

序列类型(序列类)实例化后称为序列对象。序列类型指是有序排列的多个元素,可以通过元素所在序列的位置(索引)来访问每个元素。

基本的序列类型有list(列表)、tuple(元组)、range(数字序列),此外还有文本序列类型,用于二进制数据处理的序列类型。这些序列类型在后面的课程都会单独介绍。

序列类型支持如下通用操作,有些操作在前面的课程已经介绍过。下表中的s 和 t 是具有相同类型的序列,i, j 和 k 是整数而 x 是任何满足 s 所规定的类型和值限制的任意对象。

08.png

注释

(1)in和not in是成员运算符,用于判断x是否在序列s内。对in运算符来说,如果x和序列内的某一元素内容相同,则结果为True;对not in运算符来说,如果x和序列内的某一元素内容相同,则结果为False。

(2)s+t用于将两个序列对象拼接成一个新的序列对象。

(3)s * n 或 n * s用于将序列对象s自身拼接n次,该操作会创建一个新的序列对象。

(4)s[i] 用于访问索引为i的序列对象s的元素,也就是序列对象s的第i项(起始为0)。

(5)s[i:j] 用于切片(也称为截取)序列对象s,切片范围为从索引i到索引j-1的元素(不含索引j的元素)。

(6)s[i:j:k] 用于切片序列对象s,切片范围为索引号i,i+k,i+2*k,i+3*k,以此类推,当到达j时停止,但一定不包括j。

(7)len是内置函数,用于求序列对象s的长度。

(8)min是内置函数,用于求序列对象s的最小项。

(9)max是内置函数,用于求序列对象s的最大项。

(10)index()是序列对象s的方法,s.index(x)返回x在序列对象s的索引号,如果序列对象s不含x,则会引发ValueError异常。

(11)count()是序列对象s的方法,s.count(x)返回x在序列对象s出现的总次数。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论