1 成员方法
1.1 类的定义和使用
class 类名称:
类属性
类行为
创建类对象的语法:
对象 = 类名称()
1.2 成员变量和成员方法
1.3 成员方法的定义语法
在类中定义成员方法和定义函数基本一致,但仍有细微区别:
可以看到,在方法定义的参数列表中,有一个:self关键字
self关键字是成员方法定义的时候,必须填写的
。
- 它用来表示类对象自身的意思
- 当我们使用类对象调用方法的是,self会自动被python传入
在方法内部,想要访问类的成员变量,必须使用self
注意事项
self关键字,尽管在参数列表中,但是传参的时候可以忽略它。
2 构造方法
属性(成员变量)的赋值
构造方法
Python类可以使用:__init__()
方法,称之为构造方法。
可以实现:
在创建类对象(构造类)的时候,会自动执行
。
在创建类对象(构造类)的时候,将传入参数自动传递给__init__方法使用
。
构建类时传入的参数会自动提供给__init__
方法
构建类的时候__init__
方法会自动执行
3 其它内置方法
魔术方法
__str__
字符串方法
当类对象需要被转换为字符串之时,会输出如上结果(内存地址),内存地址没有多大作用,我们可以通过__str__方法,控制类转换为字符串的行为。
- 方法名:str
- 返回值:字符串
- 内容:自行定义
__lt__
小于符号比较方法
__le__
小于等于比较符号方法
魔术方法:__le__
可用于:<=、>=
两种比较运算符上。
__eq__
比较运算符实现方法
- 不实现
__eq__
方法,对象之间可以比较,但是是比较内存地址,也即是:不同对象==比较一定是False结果。 - 实现了
__eq__
方法,就可以按照自己的想法来决定2个对象是否相等了。
4 封装
4.1 私有成员
定义私有成员的方式非常简单,只需要:
- 私有成员变量:变量名以__开头(2个下划线)
- 私有成员方法:方法名以__开头(2个下划线)
即可完成私有成员的设置。
4.2 使用私有成员
私有方法无法直接被类对象使用
私有变量无法赋值,也无法获取值
5 继承
5.1 单继承
继承分为:单继承和多继承
使用如图语法,可以完成类的单继承。
继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有)。
5.2 多继承
- 注意事项:
多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。即:先继承的保留,后继承的被覆盖。 - pass关键字
pass是占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思。
5.3 复写
子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。即:在子类中重新定义同名的属性或方法即可。
5.4 调用父类同名成员
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员,如果需要使用被复写的父类的成员,需要特殊的调用方式:
-
方式1:调用父类成员
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self) -
方式2:使用super()调用父类成员
使用成员变量:super().成员变量
使用成员方法:super().成员方法()
只能在子类内调用父类的同名成员,子类的类对象直接调用会调用子类复写的成员。
案例:
6 类型注解
6.1 定义
Python在3.5版本的时候引入了类型注解,以方便静态类型检查工具,IDE等第三方工具。
类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显式的说明)。
主要功能:
- 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
- 帮助开发者自身对变量进行类型注释
支持:
- 变量的类型注解
- 函数(方法)形参列表和返回值的类型注解
6.2 类型注解的语法
6.2.1 为变量设置类型注解
基础语法: 变量: 类型
-
基础数据类型注解
-
类对象类型注解
-
基础容器类型注解
-
容器类型详细注解
注意:
- 元组类型设置类型详细注解,需要将每一个元素都标记出来
- 字典类型设置类型详细注解,需要2个类型,第一个是key第二个是value
除了使用 变量: 类型, 这种语法做注解外,也可以在注释中进行类型注解。
语法:
# type: 类型
- 在注释中进行类型注解
6.2.2 类型注解的限制
类型注解主要功能在于:
- 帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
- 帮助开发者自身对变量进行类型注释(备注)
并不会真正的对类型做验证和判断。也就是,类型注解仅仅是提示性的,不是决定性的。
6.3 函数(方法)的类型注解 - 形参注解
函数和方法的形参类型注解语法:
6.4 函数(方法)的类型注解 - 返回值注解
同时,函数(方法)的返回值也是可以添加类型注解的。
语法如下:
案例:
6.5 Union类型
使用Union[类型, ......, 类型]
可以定义联合类型注解。
Union联合类型注解,在变量注解、函数(方法)形参和返回值注解中,均可使用。
导包:from typing import Union
7 多态
多态,指的是:多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。多态常作用在继承关系上。
即:
- 以父类做定义声明
- 以子类做实际工作
- 用以获得同一行为, 不同状态
8 抽象类(接口)
这种设计的含义是:
- 父类用来确定有哪些方法
- 具体的方法实现,由子类自行决定