类
# 设计一个类(类似生活中:设计一张登记表)
class Student:
name = None # 记录学生姓名
gender = None # 记录学生性别
nationality = None # 记录学生国籍
native_place = None # 记录学生籍贯
age = None # 记录学生年龄
# 创建一个对象(类比生活中:打印一张登记表)
# 创建类对象的语法 对象 = 类名称()
stu_1 = Student()
# 对象属性赋值(填写表单)
stu_1.name = "小明"
stu_1.gender = "男"
stu_1.nationality = "中国"
stu_1.native_place = "河北省"
stu_1.age = 31
# 获取对象中记录的信息
print(stu_1.age)
# 类的行为,相当于在类里面写一个函数,称为成员方法
在类的成员方法里面引用参数需要用self,例如self.name
class Student:
name = None
# self在成员方法中出现,不用传参
def say_hi(self):
print(f"大家好,我是{self.name},请大家多多关照")
def say_hi2(self, msg):
print(f"大家好,我是{self.name},{msg}")
stu = Student()
stu.name = "小明"
stu.say_hi2("哈哈哈")
# 类的构造方法 __init__()方法,称之为构造方法,用于在创建对象时初始化对象的状态
class Student:
def __init__(self, name, age, tel):
self.name = name
self.age = age
self.tel = tel
print("Student创建了一个类对象")
stu = Student("小明", 22, "12345677890")
print(stu.name)
其他成员方法
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
# __str__ 字符串方法
# 控制类转换为字符串的行为
def __str__(self):
return f"Student类对象,name:{self.name}, age:{self.age}"
# __lt__ 小于符号比较方法
def __lt__(self, other):
return self.age < other.age
# __le__小于等于符号比较方法
def __le__(self, other):
return self.age <= other.age
# __eq__比较运算符实现方法 ==
def __eq__(self, other):
return self.age == other.age
stu1 = Student("小红", 23)
stu2 = Student("小明", 22)
print(stu1 == stu2)
print(str(stu2))
# 面向对象封装 将现实世界中的事物映射到类中的属性和行为
# 私有成员变量:变量名以__开头 私有成员方法:方法名以__开头 # 私有成员变量和方法不可以外部调用,可以类内部调用
class Phone:
__is_5g_enable = False
# 私有成员方法,判断__is_5g_enable的值
def __check_5g(self):
if self.__is_5g_enable == True:
print("5g开启")
else:
print("5g关闭,使用4g网络")
# 公开成员方法
def call_by_5g(self):
self.__check_5g()
print("正在通话中")
Phone1 = Phone()
Phone1.call_by_5g()
# 面向对象继承
# 单继承 class 类名(父类名) 子类继承父类的属性和方法,并且还可以添加或重写它们。
class Phone:
IMEI = None # 序列号
producer = "HM" # 厂商
def call_by_4g(self):
print("4g通话")
class Phone2022(Phone): # 继承Phone中的属性和方法
face_id = "10001" # 面部识别ID
def call_by_5g(self):
print("2022新功能:5g通话")
# 多继承 class 类名(父类1, 父类2, 父类3)
class Phone:
IMEI = None # 序列号
producer = "HM" # 厂商
def call_by_4g(self):
print("4g通话")
class NFCreader:
nfc_typr = "第五代"
producer = "HM" # 厂商
def read_card(self):
print("NFC读卡")
def read_card(self):
print("NFC写卡")
class RemoteControl:
rc_type = "红外遥控"
def control(self):
print("红外遥控开启了")
# 继承上面三个类的属性和方法
class Myphone(Phone, NFCreader, RemoteControl):
pass # 补全内容作用
# 面向对象复写
class Phone:
IMEI = None # 序列号
producer = "HM" # 厂商
def call_by_4g(self):
print("4g通话")
class Phone2022(Phone):
face_id = "10001" # 面部识别ID
def call_by_5g(self):
print("2022新功能:5g通话")
class Myphone2(Phone2022):
producer = "IT" # 复写父类的成员属性
def call_by_5g(self):
print("开启CPU单核模式,确保通话时省电")
# 子类中调用父类成员方法
# 方式1
# print(f"父类的厂商是:{Phone.producer}")
# Phone2022.call_by_5g(self)
# 方式2
print(f"父类的厂商是:{super().producer}")
super().call_by_5g()
phone = Myphone2()
phone.call_by_5g()
print(phone.producer)
注解
# 对形参进行类型注解
def add(x: int, y: int):
return x + y
# 返回值注解
def func(data: list) -> list: # -> 注解返回值类型
return data
# Union类型注解 可以定义联合类型注解 使用typing模块
from typing import Union
my_list: list[Union[int, str]] = [1, 2, "IT", "HM"]
# 注解说明函数传入参数可以是int类型,也可以是str类型,返回值可以是int类型,也可以是str类型
# Union[int, str]表示func函数的参数data可以是int(整数)或str(字符串)类型,同时函# 数的返回值也可以是int或str。
def func(data: Union[int, str]) -> Union[int, str]:
pass # 避免函数内容是空的,补全内容作用