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)字典替代方案
你的练习清单
- 定义 __init__,第一个参数是 self。
- 用 self.name = value 赋属性。
- 在实例上调用方法,而不是在类上调用。
- 先写一个小类,再考虑继承。
常见问题
self 是什么?
self 是调用方法时使用的实例。Python 会自动传入它,所以调用者不需要提供。
每个程序都需要类吗?
不需要。简单记录用字典,计算用函数。数据和行为确实属于一起时,类才有价值。
为什么会提示缺少参数?
方法定义时漏了 self,或调用时缺少必需参数,都可能造成这个错误。检查方法签名和调用。
练习类
12 道题,覆盖 __init__、self、属性、方法和独立实例。
继续阅读: