目录
1.类和对象(实例)
1.1对象(实例)
1.1.1使用对象组织数据
1.1.2类中增加属性
1.2成员方法(类)
1.2.1类的定义和使用语法
1.2.2成员方法的使用
1.2.3self关键字的作用
1.3类和对象
2.构造方法
3.其他内置方法
4.封装
4.1封装
4.2私有成员
5.继承
5.1补全语法pass
5.2复写
5.3调用父类同名成员
6.类型注解【变量: 类型】
6.1函数(方法)类型注解
6.2 Union类型
7.多态
7.1抽象类(接口)
1.类和对象(实例)
1.1对象(实例)
实体,根据类(模板)做出来的具体东西
定义 | ||
class ClassName(object): | class:表明这是一个类 ClassName:类的名字 ():父类集合的开始和结束 object:父类的名字,定义的类继承自父类,可不写,默认object。 object:所有类的直接或间接父类 | class Player(object): #object基类 |
1.1.1使用对象组织数据
在程序中是可以做到和生活中那样,设计表格、生产表格、填写表格的组织形式的。
1. 在程序中设计表格:设计类(class) | class Student: |
2. 在程序中打印生产表格:创建对象 | stu_1 = Student() #基于类创建对象 |
3. 在程序中填写表格:对象属性赋值 | 为学生1、学生2对象赋予名称属性值: stu_1.name = "张蘑菇" stu_2.name = "李蘑菇" |
例子:
1.设计一个类(类比生活中,设计一张登记表) | 个人登记表:
| ||||||||||
2.创建一个对象(类比生活中:打印一张登记表) | |||||||||||
3.对象属性进行赋值(类比生活中:填写表单) |
| ||||||||||
4.获取对象中记录的信息 | 石蘑菇 南沙群岛 |
1.1.2类中增加属性
class Player(object): | 定义对象 |
numbers = 0 | |
def __init__(self, name, age): # 初始化函数(构造函数) self.level = level | 初始化函数 (构造函数) |
weapon.numbers += 1 | |
def show(self): # 实例的方法 | 实例方法 |
@classmethod #装饰器 | 类方法 |
@staticmethod def isvalid(**kwargs): else: infos = {'name':'mia','age':13,'city':'北京','level':'白银'} | 静态方法: 做验证、判断、计算 |
gun = weapon('magic_gun',1000,'青铜') | 调用实例方法 |
1.2成员方法(类)
1.2.1类的定义和使用语法
类:可以定义属性用来记录数据
可以定义函数,用来记录行为
类的使用 | class 类名称: | class关键字,表示要定义的类 类的属性:定义在类中的变量(成员变量) 类的行为:定义在类中的函数(成员方法) |
创建类对象 | 对象 = 类名称( ) |
1.2.2成员方法的使用
方法:定义在类内部的函数
例子 | 结果 | |
类中定义成员方法 def 方法名(self, 形参1, …,形参N): | class Student: stu_1 = Student() | 我是赵蘑菇 |
class Student: | 我是赵蘑菇,好 |
1.2.3self关键字的作用
用来表示类对象自身的意思
当使用类对象调用方法的是,self会自动被python传入
在方法内部,想要访问类的成员变量,必须使用self
1.3类和对象
class Clock: | 属性 |
def ring(self): | 行为 |
1.3.1面向对象编程
使用对象进行编程。类只是一种程序内的“设计图纸”,要基于图纸生产实体(对象),才能正常工作。
创建对象 | #创建1个闹钟对象并让工作 |
2.构造方法
构造方法:__init__( )方法
可以实现:在创建类对象(构造类)的时候,会自动执行。
在创建类对象(构造类)的时候,将传入参数自动传递给__init__方法使用。
class Student: | 构建类时传入的参数会自动提供给__init__方法 构建类的时候__init__方法会自动执行 结果: Student类创建了一个类对象 王蘑菇 31 |
3.其他内置方法
__init__ 构造方法,是Python类内置的方法之一。
这些内置的类方法,各自有各自特殊的功能,这些内置方法称为:魔术方法
魔术方法 | __init__ | 构造方法 | |
__str__ | 字符串方法 | 控制类转换为字符串的行为 | |
__lt__ | > 和 < 符号比较 | ||
__le__ | ≥ 和 ≤ 符号比较 | ||
__eq__ | ==符号比较 |
class Student: | |
print(stu1 <= stu2) | 结果:True |
print(stu1 == stu2) | 结果:False |
4.封装
面向对象编程,是许多编程语言都支持的一种编程思想。
简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。
面向对象包含3大主要特性:封装、继承、多态
封装:将现实世界事物在类中描述为属性和方法。
4.1封装
封装将现实世界事物的:属性、行为。封装到类中,描述为:成员变量、成员方法
属性、行为:对用户开放的、隐藏的属性和行为
4.2私有成员
使用情况:现实事物有部分属性和行为是不公开对使用者开放的。
意义:在类中提供仅供内部使用的属性和方法,而不对外开放(类对象无法使用)
类中提供了私有成员的形式来支持。 私有成员变量 私有成员方法 | |
定义私有成员的方式: 私有成员变量:变量名以__开头(2个下划线) 私有成员方法:方法名以__开头(2个下划线) |
注:
报错 | 有方法无法直接被类对象使用 | |
私有变量无法赋值,也无法获取值 | ||
正确 | 私有成员无法被类对象使用, 但可以被其它的成员使用。 |
5.继承
继承表示:将从父类那里继承(复制)来成员变量和成员方法(不含私有),继承以前的功能
继承分为:单继承和多继承
单继承 | 多继承 |
cLass 类名(父类1): | cLass 类名(父类1,…,父类N ): |
继承→子类,被继承→父类
继承 | ||
cLass 类名(父类1,…,父类N ): | ||
5.1补全语法pass
继承后不需要修改内容时,用pass | class MyPhone(Phone, NFCReader): |
5.2复写
子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。 即:在子类中重新定义同名的属性或方法即可。 |
5.3调用父类同名成员
一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员
如果需要使用被复写的父类的成员,需要特殊的调用方式:
方法一 | 调用父类成员 使用成员变量:父类名.成员变量 使用成员方法:父类名.成员方法(self) | |
方法二 | 使用super()调用父类成员 使用成员变量:super().成员变量 使用成员方法:super().成员方法() |
6.类型注解【变量: 类型】
方便静态类型检查工具,IDE等第三方工具。
类型注解:在代码中涉及数据交互的地方,提供数据类型的注解(显式的说明)。
主要功能:帮助第三方IDE工具(如PyCharm)对代码进行类型推断,协助做代码提示
帮助开发者自身对变量进行类型注释
支持:函数(方法)形参列表和返回值的类型注解
变量的类型注解
无法直接看出变量类型之时会添加变量的类型注解
基础数据类型注解 变量: 类型 | var_1: int = 10 |
类对象类型注解 变量: 类型 | class student: |
基础容器类型注解 变量: 类型 | my_list: list = [1,2,3] |
容器类型详细注解 变量: 类型 | my_list: list[int] = [1,2,3] |
在注释中进行类型注解 # type: 类型 | var_1 = random.randint(1,10) # type:int |
6.1函数(方法)类型注解
形参 注解 | def 函数方法名(形参名:类型, ……): | def add(x: int,y: int): |
返回值 注解 | def 函数方法名(形参:类型, ……)->返回值类型: | def add(x: int, y: int) -> int: |
def func(data: list[int]) -> list[int]: |
6.2 Union类型
Union[类型, ......,类型] 定义联合类型注解 | from typing import Union |
函数中定义 | def func(data: Union[int,str]) -> Union[int,str]: |
Union联合类型注解,在变量注解、函数(方法)形参和返回值注解中,均可使用。
7.多态
多态:多种状态,完成某个行为时,使用不同的对象会得到不同的状态。
class Animal: | 多态 → | def make_noise(animal: Animal): |
多态常作用在继承关系上
比如:函数(方法)形参声明接收父类对象、实际传入父类的子类对象进行工作
即:以父类做定义声明、以子类做实际工作、用以获得同一行为, 不同状态
7.1抽象类(接口)
配合多态:完成抽象的父类设计(设计标准)
具体的子类实现(实现标准)
class Animal: | 父类用来确定有哪些方法,具体的方法实现,由子类自行决定。 抽象类:含有抽象方法的类称之为抽象类 抽象方法:方法体是空实现的(pass)称之为抽象方法 |