继承
单继承
子类的功能从父类继承过来
多继承
Pass 站位语句 保证类和方法的完整性 语法不报错 表示无内容 空的意思
Phone2023 中已经继承了 Phone
则会报错
改成class MyPhone(NFCReader, RemoteControl, Phone2023): 就没问题
同名成员 最左边的优先级最高
复写
若想重新使用原来父类的变量或方法 父类名. 别忘了self
Super()
类型注解
注释中 类型注解
函数的形参注解
返回值注解 ->
Union 记得导包
函数也能用
多态 常作用在父类关系上
抽象类就好比定义一个标准 做顶层设计 pass
包含了一些抽象的方法,要求子类必须实现
配合多态
练习
# file_define.py
"""
用于文件相关定义
"""
import json
from data_define import Record
class FileReader: # 抽象类
def read_data(self) -> list[Record]:
"""用于读取相关文件 抽象类"""
pass
class TextReader(FileReader):
def __init__(self, path):
self.path = path
def read_data(self) -> list[Record]:
with open(self.path, 'r', encoding='UTF-8') as f:
record = []
for line in f.readlines():
file_data = line.strip().split(',')
record.append(Record(file_data[0], file_data[1], int(file_data[2]), file_data[3]))
return record
class JsonReader(FileReader):
def __init__(self, path):
self.path = path
def read_data(self) -> list[Record]:
with open(self.path, 'r', encoding='UTF-8') as f:
record = []
for line in f.readlines():
data_dict = json.loads(line)
record.append(
Record(data_dict['date'], data_dict['order_id'], data_dict['money'], data_dict['province']))
return record
if __name__ == '__main__':
text1 = TextReader('D:/dev/python-learn/2011年1月销售数据.txt')
text2 = JsonReader('D:/dev/python-learn/2011年2月销售数据JSON.txt')
list1 = text1.read_data()
list2 = text2.read_data()
for l in list1:
print(l)
for l in list2:
print(l)
# data_define.py
"""
用于类的定义
"""
class Record:
def __init__(self, date, order_id, money, province):
self.date = date # 日期
self.order_id = order_id # id
self.money = money # 销售额
self.province = province # 销售省份
def __str__(self):
return f'{self.date}, {self.order_id}, {self.money}, {self.province}'
# main.py
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType
from pyecharts.options import TitleOpts, LabelOpts, InitOpts
from data_define import *
from file_define import *
text_file_reader = TextReader('D:/dev/python-learn/2011年1月销售数据.txt')
json_file_reader = JsonReader('D:/dev/python-learn/2011年2月销售数据JSON.txt')
Jan_data: list[Record] = text_file_reader.read_data()
Feb_data: list[Record] = json_file_reader.read_data()
all_data: list[Record] = Jan_data + Feb_data
record_dict = {}
for record in all_data:
if record.date in record_dict.keys():
record_dict[record.date] += record.money
else:
record_dict[record.date] = record.money
bar = Bar(init_opts=InitOpts(theme=ThemeType.LIGHT))
bar.add_xaxis(list(record_dict.keys()))
bar.add_yaxis('销售额', list(record_dict.values()), label_opts=LabelOpts(is_show=False))
bar.set_global_opts(
title_opts=TitleOpts(title='每日销售额')
)
bar.render('每日销售额柱状图.html')