开始使用免费开始使用

重载相等性比较

当使用 == 比较自定义类的两个对象时,Python 默认只比较对象引用本身,而不是对象中包含的数据。要覆盖这种行为,可以在类中实现特殊方法 __eq__()。它接收两个参数——要比较的对象——并返回 TrueFalse。当两个对象进行比较时,这个方法会被隐式调用。

脚本窗格中已经为您提供了上一章节的 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)
    
编辑并运行代码