Python学习笔记(10)

继承

单继承

子类的功能从父类继承过来

多继承

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')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值