重载相等性比较
当使用 == 比较自定义类的两个对象时,Python 默认只比较对象引用本身,而不是对象中包含的数据。要覆盖这种行为,可以在类中实现特殊方法 __eq__()。它接收两个参数——要比较的对象——并返回 True 或 False。当两个对象进行比较时,这个方法会被隐式调用。
脚本窗格中已经为您提供了上一章节的 BankAccount 类。该类有一个属性 balance,以及一个 withdraw() 方法。两个余额相同的银行账户并不一定是同一个账户,但银行账户通常有一个"账号",两个账号相同的账户应当被视为同一个。
本练习是课程的一部分
Python 面向对象编程
练习说明
- 先选择第 1–7 行的代码并点击"运行代码"按钮试一试。然后在控制台中创建几个
BankAccount对象并进行比较。 - 修改
__init__()方法,接收一个新参数number,并初始化新的number属性。 - 定义一个
__eq__()方法:当两个对象的number属性相等时返回True。 - 查看打印语句和控制台中的输出。
交互式实操练习
通过完成这段示例代码来试试这个练习。
class BankAccount:
# MODIFY to initialize a number attribute
def __init__(self, balance=0):
self.balance = balance
def withdraw(self, amount):
self.balance -= amount
# Define __eq__ that returns True if the number attributes are equal
def ____(____, ____):
return ____.number == ____.____
# Create accounts and compare them
acct1 = BankAccount(123, 1000)
acct2 = BankAccount(123, 1000)
acct3 = BankAccount(456, 1000)
print(acct1 == acct2)
print(acct1 == acct3)