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