从奶茶店看懂类方法与静态方法

​​一、类方法像奶茶店长,静态方法像收银机​​

​​@classmethod​​ 就像奶茶店的店长,他手里有整个店铺的秘方(类属性),能调配新口味(创建实例)也能调整全店糖量标准(修改类配置):

class MilkTeaShop:
    default_sugar = 50  # 全店默认糖量
    
    @classmethod
    def create_tea(cls, name):
        return cls(name, cls.default_sugar)  # 用类属性做奶茶

@staticmethod​​ 则像收银台的计算器,它不关心奶茶配方,只专注算钱(独立功能):

  @staticmethod
    def calc_price(cups):
        return cups * 15  # 每杯15元

二、店长与计算器的核心差异表​​

在这里插入图片描述

三、奶茶分店实战演示​​

场景1:使用类方法在总店开发新品,然后分店继承配方

class Headquarter:
    member_discount = 0.9 # 会员9折
    
    def __init__(self,name,price):
        self.name = name
        self.price = price

    @classmethod
    def new_product(cls, name, cost):
        # 根据成本定价
        price = cost * 2 * cls.member_discount
        return cls(name,price)

class SubShop(Headquarter):
    member_discount = 0.8 # 分店专属8折

# 使用的是分店折扣
matcha  = SubShop.new_product("抹茶奶盖",10)
print(matcha.price)

场景2:使用静态方法计算两杯奶茶的等待时间

class Headquarter:
    # ... 原有的代码不变 ...

    @staticmethod
    def calc_waiting_time(cups, time_per_cup=3):
        """计算多杯奶茶的制作等待时间
        :param cups: 订单杯数
        :param time_per_cup: 单杯制作时间(默认3分钟)
        """
        return cups * time_per_cup


print(Headquarter.calc_waiting_time(2))        
print(SubShop.calc_waiting_time(3, time_per_cup=2)) 

​​四、新手指南

​​需要记住店铺秘方时​​ → 类方法
(例如根据会员等级调整配方)
​​单纯做数学题时​​ → 静态方法
(例如计算两杯奶茶的等待时间)
​​开分店要保持统一标准​​ → 类方法
(例如所有分店使用相同定价策略)
​​设计促销活动计算器​​ → 静态方法
(例如满减优惠计算)

​​五、常犯错误

​​错误1:计算器想改配方​​

@staticmethod
def change_sugar(new_sugar):
    default_sugar = new_sugar  # 实际创建的是局部变量!

正确做法:交给店长(类方法)处理

​​错误2:店长忘了带秘方

@classmethod
def show_discount(cls):
    print(member_discount)  # 正确应为 cls.member_discount

​​错误3:让计算器管库存​​

@staticmethod
def check_stock(self):  # 不需要self却硬加
    return self.remaining_cups > 0 

​​六、动手实验:开一家自己的奶茶店​​

class MyTeaShop:
    # 类属性
    base_price = 12
    topping_price = {"珍珠":3, "椰果":2}
    
    # 类方法:根据原料定价
    @classmethod
    def create_menu(cls, tea_type):
        return cls.base_price + cls.topping_price.get(tea_type,0)
    
    # 静态方法:打印订单
    @staticmethod
    def print_order(cups, total):
        print(f"您购买了{cups}杯,总计{total}元")


print(MyTeaShop.create_menu("珍珠")) 
MyTeaShop.print_order(3, 45)       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值