面向对象
一、类的成员方法
1.类是有那两部分组成呢?
- 类的属性,称之为:成员变量
- 类的行为,称之为:成员方法
注意:函数是写在类外的,定义在类内部,我们都称之为方法哦
2.类和成员的定义语法
class 类名称:
成员变量
def 成员方法(self, 参数列表):
成员方法体
对象 = 类名称()
3.self的作用
- 表示类对象本身的意思
- 只有通过self,成员方法才能访问类的成员变量
- self出现在形参列表中,但是不占用参数位置,无需理会
二、构造方法
1.Python类可以使用__init__()方法,称之为构造方法。
2.可以实现:
-
在创建对象(构造类)的时候,会自动执行。
-
在创建对象(构造类)的时候,将传入参数自动传递给__init__方法使用。
3.注意事项 -
构造方法名称:init,千万不要忘记init前后都有2个下划线
-
构造方法也是成员方法,千万不要在参数列表中提供:self
-
在定义方法内定义成员变量,需要使用self关键字
def __init__(self, name, age, tel):
self.name = name
self.age = age
self.tel = tel
三、魔术方法
class MyClass:
def __init__(self, 参数):
"""构造函数 - 对象创建时调用"""
pass
def __str__(self):
"""返回对象的字符串表示 - print()时调用"""
return "字符串表示"
def __len__(self):
"""返回长度 - len()时调用"""
return 长度值
def __eq__(self, other):
"""相等比较 - == 时调用"""
return self.属性 == other.属性
四、封装
1.面向对象的三大特性
简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。
-
封装
-
继承
-
多态
2.封装的概念:将现实世界事物在类中描述为属性和方法,即为封装。
3.私有成员:现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时候也需要达到这个要求,就需要定义私有成员了,
4.定义私有成员:成员变量和成员方法的命名均以__作为开头即可。
5.私有变量的访问限制:类对象无法访问私有成员,但类中其他对象可以访问私有成
员。
五、继承
(一)继承的基础语法
1.单继承
class 类名(父亲名):
类内容体<details>
2.多继承
class 类名(父亲1, 父亲2, ......, 父亲N):
类内容体<details>
3.pass关键字
- pass是站位语句,用来保证函数(方法)或定义的完整性,表示无内容,空的意思
(二)复写和使用父类成员
1.复写
子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。即:在子类中重新定义同名的属性或方法即可。
2.调用父类同名成员
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员如果需要是有被复写的父类成员,需要特殊的调用方法:
方法1:
- 调用父类成员
使用成员变量:父亲名.成员变量
使用成员方法:父亲名.成员方法
方法2:
- 使用super()调用父类成员
使用成员变量:supper().成员变量
使用成员方法:supper().成员方法()
六、类型注解
(一)变量的类型注解
1.为变量设置类型注解
- 基础语法:
变量:类型
2.注释中进行类型注解
- 语法:
# type : 类型
(二)函数(方法)的类型注解
- 语法如下:
def 函数方法名(形参: 类型, ......, 形参: 类型) -> 返回值类型;
(三)Union类型
1.什么是Union类型?
- 使用Union可以定义联合类型注解
2.Union的使用方式
-
导包:from typing import Union
-
使用:Union[类型, ......, 类型]
七、多态
1.什么是多态?
- 多态指的是,同一个行为,使用不同的对象获得不同的状态。
定义函数(方法),通过类型注释申明需要父类对象,实际传入子类对象进行工作,从而获得不同的工作状态。
2.什么是抽象类(接口)
- 包含抽象方法的类,称之为抽象类。抽象方法是指:没有具体实现的方法(pass)称之为抽象方法
3.抽象类的作用
- 多用于做顶层设计(设计标准),以便子类做具体实现。
也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法并配合多态使用,获得不同的工作状态。
浙公网安备 33010602011771号