文章目录
一、类的基本使用
1.定义
class 类名称
类的属性(即定义在类中的变量)
类的行为(即定义在类中的函数)
2.使用 对象=类名称
class Student:
name = None
age = None
def say_hi(self):
print(self.name)
二、成员方法
定义时需要写slef,调用时不需要
def 方法名(self,参数1,参数2,...): //self表示类自身
方法体
三、构造方法
__init__()方法,称之为构造方法
def __init__(self,name,age,tel):
self.name = name
self.age = age
self.tel = tel
四、类内置方法
- init 构造方法,是Python类内置的方法之一
- 这些内置的类方法,各自有各自特殊的功能,这些内置方法我们称之为:魔术方法。
- 一般形式_xxx_
- 常见魔术方法:
- _str_
一般print(student)打印的是student的内存地址,通过__str__控制将student变成字符串打印的东西。像java中的toString()
def __str__(self):
return f"Student类对象:name:{self.name}"
- _lt_(小于写了自动能判别大于,即小于和大于写一个,小于等于和大于等于写一个)
- 同理还有_le_,_gt_,_ge_
通过改造两个对象就能比大小
def __lt__(self,other):
return self.age < other.age
五、封装
私有成员变量:变量名以__开头(两个下划线)
私有成员方法:方法名以__开头(两个下划线)
__name = "BUAA"
六 、继承
1、单继承
class 类名(父类名):
类内容体
2、多继承
class 类名(父类1,父类2,父类3,...):
类内容体
//若这个类没有其他功能,内容体为空,此时需要写pass占位
- 多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。即:先继承的保留,后继承的被覆盖
3、复写
直接重写即可。
- 一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员
- 如果需要使用被复写的父类的成员,需要特殊的调用方式
1.调用父类成员
使用成员变量:父类名.成员变量
使用成员方法:父类名.成员方法(self)
2.使用super()调用父类成员
使用成员变量:super().成员变量
使用成员方法:super().成员方法()
七、类型注解
1、概念
- Python在3.5版本的时候引入了类型注解以方便静态类型检查工具,IDE等第三方工具。
- 类型注解:在代码中涉及数据交互的地方提供数据类型的注解(显式的说明)
- 主要功能:
- 帮助第三方IDE工具(如PyCharm)对码进行类型推断,协助做代码提示
- 帮助开发者自身对变量进行类型注释
- 支持:
- 变量的类型注解
- 函数(方法)形参列表和返回值的类型注解
2、方式1:变量:类型
1.变量设置类型注解
var_t:int =10
var_2:float = 3.1415926
var_3:bool = True
var 4:str ="itheima'
2.类对象类型注解
class Student:
pass
stu: Student = Student()
3.基础容器类型注解
my_list:ist=[1,2,3]
my_tuple:tuple=(1,2,3)
my_set:set={1,2,3}
my_dict: dict={"itheima":666}
my_str: str= "itheima"
4.容器类型详细注解
元组类型设置类型详细注解,需要将每一个元素都标记出来
字典类型设置类型详细注解,需要两个类型,第一个是key第二个是value
my_list:1ist[int]=[1,2,3]
my_tuple: tuple[str,int, bool]=("itheima",666,True)
my_set:set[int]={l,2,3}
my_dict: dict[str,int]={"itheima":666}
5.函数(方法)类型注解——形参注解
def 函数名(形参名:类型,形参名:类型,....)
5.函数(方法)类型注解——返回值注解
def 函数名(形参名:类型,形参名:类型,....)->返回值类型
6.union混合类型
my_list:list[union[str, int]]=[1,2,"itheima", "itcast"]
my_dict: dict[str, union[str, int]]= {"name":"周杰轮","age": 31}
def func(data: unionlint,str])-> union[int, str]:
pass
3、方式2:# type:类型
var_1 = random.randint(1,10) # type: int
var_2 = json.loads(data) # type: dict[str, int]
var_3 = func() # type: student
4、注意点
- 类型注解只是提示作用,在编译中并不会看,因此不遵守是不会报错的
八、多态
形参接收父类对象,实际是传入父类的子类对象进行工作。