Day6:python面向对象编程——构建可扩展的订单管理系统

目标:掌握类与对象的核心概念,实现模块化的订单业务逻辑


一、类与对象:订单管理系统核心

1. 基础订单类

class Order:
    """订单基类"""
    def __init__(self, order_id, customer):
        self.order_id = order_id      # 订单号
        self.customer = customer      # 客户名
        self.items = []               # 商品列表
        self.total = 0.0              # 总金额
    
    def add_item(self, name, price, quantity=1):
        """添加商品项"""
        self.items.append({
            "name": name,
            "price": price,
            "quantity": quantity
        })
        self._calculate_total()
    
    def _calculate_total(self):
        """计算订单总额(私有方法)"""
        self.total = sum(item["price"] * item["quantity"] for item in self.items)
    
    def display(self):
        """打印订单摘要"""
        print(f"订单 #{self.order_id}")
        print(f"客户:{self.customer}")
        for item in self.items:
            print(f"- {item['name']} x{item['quantity']}{item['price']:.2f}")
        print(f"总计:¥{self.total:.2f}\n")

# 创建订单实例
order_101 = Order("20240315-001", "张三")
order_101.add_item("无线耳机", 299.0, 2)
order_101.add_item("手机壳", 59.9)
order_101.display()

二、继承与多态:处理特殊订单

1. VIP订单类(继承基础订单)

class VIPOrder(Order):
    """VIP订单(享受9折优惠)"""
    def __init__(self, order_id, customer, vip_level):
        super().__init__(order_id, customer)
        self.vip_level = vip_level
    
    def _calculate_total(self):  # 重写计算方法
        super()._calculate_total()
        self.total *= 0.9  # 应用折扣

# VIP订单实例
vip_order = VIPOrder("20240315-VIP01", "李四", 2)
vip_order.add_item("智能手表", 899.0)
vip_order.display()  # 输出显示折扣后价格

三、企业级实战:订单批量处理系统

1. 需求场景

  • 批量导入多个订单
  • 自动分类普通/VIP订单
  • 生成当日销售报告

2. 完整实现

class OrderManager:
    """订单管理器"""
    def __init__(self):
        self.orders = []
    
    def import_orders(self, order_list):
        """批量导入订单"""
        for order_data in order_list:
            if order_data["is_vip"]:
                order = VIPOrder(
                    order_data["id"], 
                    order_data["customer"],
                    order_data["vip_level"]
                )
            else:
                order = Order(
                    order_data["id"], 
                    order_data["customer"]
                )
            for item in order_data["items"]:
                order.add_item(item["name"], item["price"], item.get("quantity", 1))
            self.orders.append(order)
    
    def generate_daily_report(self):
        """生成日报"""
        total_income = sum(order.total for order in self.orders)
        print(f"今日总订单数:{len(self.orders)}")
        print(f"当日总营收:¥{total_income:.2f}")

# 模拟数据
orders_data = [
    {
        "id": "20240315-002",
        "customer": "王五",
        "is_vip": False,
        "items": [
            {"name": "充电宝", "price": 129.0, "quantity": 3}
        ]
    },
    {
        "id": "20240315-VIP02",
        "customer": "赵六",
        "is_vip": True,
        "vip_level": 3,
        "items": [
            {"name": "蓝牙音箱", "price": 399.0}
        ]
    }
]

# 执行处理
manager = OrderManager()
manager.import_orders(orders_data)
manager.generate_daily_report()

四、今日任务清单

  • 为Order类添加删除商品项的方法
  • 实现白金VIP(VIPLevel≥3)额外95折功能
  • 扩展订单导入功能,支持从JSON文件读取数据(结合Day5知识)

高频问题排查

  1. 忘记self参数 → 检查方法定义首个参数是否为self
  2. 继承方法不生效 → 确认是否使用super()调用父类方法
  3. 属性未初始化 → 检查__init__方法是否正确定义

上一篇 Day5:python文件处理——自动备份销售数据与异常日志

你可能感兴趣的:(python,开发语言)