专项练习 · 8 分钟阅读

Python 类练习:构建一个小型对象模型

从一个小的记录开始,类会更容易理解。先让对象保存几个字段,加一个方法,测试通过后再增加行为。

从蓝图开始

类把数据和行为组合在一起。创建对象时会运行 __init__,给属性赋初始值。第一版要小:两个字段就足够看清模式。

class Order:
    def __init__(self, drink, price):
        self.drink = drink
        self.price = price

order = Order("latte", 4.5)
print(order.drink, order.price)

两个字段的类

添加方法

方法就是类里的函数,第一个参数是 self,指向当前对象。在实例上调用方法;不需要手动传入 self。

class Order:
    def __init__(self, drink, price, quantity=1):
        self.drink = drink
        self.price = price
        self.quantity = quantity

    def total(self):
        return self.price * self.quantity

print(Order("latte", 4.5, 2).total())

计算总价

保持实例独立

每个对象都有自己的属性。创建第二个 Order 不会覆盖第一个。需要处理多条记录时,把对象放进列表,用同一个循环处理。

class Order:
    def __init__(self, drink, price):
        self.drink = drink
        self.price = price

orders = [Order("latte", 4.5), Order("tea", 3.0)]
for order in orders:
    print(order.drink, order.price)

多个独立对象

把重复计算放进方法

如果每个调用者都要重复同一个公式,就把它放进方法。方法名说明了意图,计算也只有一个地方需要修改。

class Order:
    def __init__(self, price, quantity):
        self.price = price
        self.quantity = quantity

    def total(self):
        return self.price * self.quantity

print(Order(4.5, 3).total())

公式只写一次

知道什么时候字典就够了

类不是必须的。只是传递固定记录时,字典可能更简单。当状态和行为确实属于一起,或同样的操作反复出现时,再引入类。

order = {"drink": "latte", "price": 4.5}
print(order["drink"])
print(order["price"] * 2)

字典替代方案

你的练习清单

常见问题

self 是什么?

self 是调用方法时使用的实例。Python 会自动传入它,所以调用者不需要提供。

每个程序都需要类吗?

不需要。简单记录用字典,计算用函数。数据和行为确实属于一起时,类才有价值。

为什么会提示缺少参数?

方法定义时漏了 self,或调用时缺少必需参数,都可能造成这个错误。检查方法签名和调用。

练习类

12 道题,覆盖 __init__、self、属性、方法和独立实例。

打开练习

继续阅读: