重载相等运算
当使用 == 比较自定义类的两个对象时,Python 默认比较的是对象指向的内存块,而不是对象中包含的数据。若要覆盖这一行为,可以在类中实现一个特殊方法,该方法接受两个参数(要比较的对象),并返回 True 或 False。当两个对象进行比较时,这个方法会被隐式调用。
上一章中的 BankAccount 类已在 script.py 中为您提供。它有两个属性:balance 和 number,以及一个 withdraw() 方法。两个拥有相同余额的账户不一定是同一个账户,但银行账户通常都有一个"账号"。两个账号相同的账户应被视为同一账户。
本练习是课程的一部分
Python 面向对象编程入门
练习说明
- 修改
__init__()方法,使其接受一个名为number的新参数,并初始化新的number属性。 - 定义一个方法,用于比较两个对象的
number属性是否相等。
交互式实操练习
通过完成这段示例代码来试试这个练习。
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)