成员方法
类的组成:
- 类的属性,称之为:成员变量
- 类的行为,称之为:成员方法、
注意:函数是写在类外的,定义在类内部,我们都称之为方法
类和成员方法的定义语法:
1
2
3
4
5
6
7
8class 类名称:
成员变量
def 成员方法(self,参数列表):
成员方法体
对象 = 类名称()self的作用
- 表示类对象本身的意思
- 只有通过self,成员方法才能访问类的成员变量
- self出现在形参列表中,但是不占用参数位置,无需理会
类和对象
类和对象的关系:
类就是程序中的“设计图纸”,对象是基于图纸生产的具体实体
什么是面向对象编程:
面向对象编程就是使用对象编程。
即设计类,基于类创建对象,并使用对象来完成具体的工作
构造方法
- 构造方法的名称:
__init__,init前后是两个下划线 - 构造方法的作用:
- 构建对象的时候会自动运行
- 构建类对象的传参会传递给构造方法,借此特性可以给成员变量赋值
- 注意事项:
- 构造方法不要忘记self关键字
- 在方法内使用成员需要使用self
魔术方法
| 方法 | 功能 |
|---|---|
__init__ |
构造方法,可用于创建类对象的时候设置初始化行为 |
__str__ |
用于实现类对象转字符串的行为 |
__lt__ |
用于2个类对象进行小于或大于比较 |
__le__ |
用于2个类对象进行小于等于或大于等于比较 |
__eq__ |
用于2个类对象进行相等比较 |
封装
封装的概念:将现实世界事物在类中描述为属性和方法,即为封装
什么是私有成员?为什么需要私有成员?
现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时候也需要达到这个要求,就需要私有成员了
如何定义私有成员:
成员变量和成员方法的命名均以
__作为开头(两个下划线)私有成员的访问限制:
- 类对象无法访问私有成员
- 类中其他成员可以访问私有成员
继承
继承:继承就是一个类,继承了另一个类的成员变量和成员方法
语法:
1
2class 类(父类1,父类2,……)
类体内容子类构建的类对象,可以
- 有自己的成员变量和成员方法
- 使用父类的成员变量和成员方法
单继承和多继承
- 单继承:一个类继承另一个类
- 多继承:一个类继承多个类,按照顺序从左向右依次继承
- 多继承中,如果父类有同名方法或属性,先继承的优先级高于后继承
pass关键字的作用:pass是占位语言,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思
复写:对父类的成员属性或成员方法进行重新定义
语法:在子类中重新实现同名成员方法或成员属性即可
在子类中调用父类成员:
方法一:
调用父类成员:
调用父类成员变量:
父类名.成员变量调用父类成员方法:
父类名.成员方法(self)方法二
使用super()调用父类成员
调用成员变量:
super().成员变量调用成员方法:
super().成员方法()注意:只可以在子类内部调用父类同名成员,子类的实体类调用默认是调用子类复写的
类型注解
变量的类型注解
什么是类型注解,有什么作用?
在代码中涉及数据交互之时,对数据类型进行显式的说明,可以帮助:
- PyCharm等开发工具对代码做类型推断协助做代码提示
- 开发者自身做类型类型的备注
类型注解支持:
- 变量的类型注解
- 函数(方法)的形参和返回值的类型注解
变量的类型注解语法
- 语法1:
变量:类型 - 语法2:在注释中,
# type: 类型
- 语法1:
注意事项
类型注解只是提示性的,并非决定性的。数据类型和注解类型无法对应也不会导致错误
函数(方法)的类型注解
函数(方法)可以为哪里添加注解?
- 形参的类型注解
- 返回值的类型注解
函数(方法)的类型注解语法:
1
2def 函数方法名(形参: 类型,……,形参: 类型) -> 返回值类型:
pass注意,返回值类型注解的符号使用:
->
Union类型
什么是Union类型?
使用Union可以定义联合类型注解
Union的使用方法
- 导包:
from typing import Union - 使用:
Union[类型,……,类型]
- 导包:
多态
什么是多态?
多态指的是,同一行为,使用不同对象获得不同的状态
如,定义函数(方法),通过类型注解声明需要的父类对象,实际传入子类对象进行工作,从而获得不同的工作状态
什么是抽象类(接口)?
包含抽象方法的类,称之为抽象类。抽象方法是指:没有具体实现的方法(pass)称之为抽象方法
抽象类的作用
多用于顶层设计(设计标准),以便子类做具体实现。也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法并配合多态使用,获得不同的工作状态