开始使用免费开始使用

检查类是否相等

在上一个练习中,您定义了一个带有 number 属性的 BankAccount 类,并用它来比较对象。但如果您把一个 BankAccount 对象与另一个也有 number 属性的不同类的对象进行比较,就可能得到意想不到的结果。

例如,考虑下面两个类:


class Phone:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
          other.number

pn = Phone(873555333)

class BankAccount:
  def __init__(self, number):
     self.number = number

  def __eq__(self, other):
    return self.number == \
           other.number

acct = BankAccount(873555333)

运行 acct == pn 会返回 True,即使我们比较的是电话号码和银行账号。

良好的做法是在 __eq__() 方法中检查传入对象的类,以确保比较有意义。

本练习是课程的一部分

Python 面向对象编程

查看课程

练习说明

PhoneBankAccount 两个类都已定义。请先使用 "Run code" 按钮按原样运行代码,并查看输出。

  • 修改 BankAccount 的定义:仅当 number 属性相同,且传入的两个对象的 type() 相同,才返回 True

再次运行代码,并查看输出。

交互式实操练习

通过完成这段示例代码来试试这个练习。

class BankAccount:
    def __init__(self, number, balance=0):
        self.number, self.balance = number, balance
      
    def withdraw(self, amount):
        self.balance -= amount 

    # MODIFY to add a check for the type()
    def __eq__(self, other):
        return (self.number == other.number)

acct = BankAccount(873555333)
pn = Phone(873555333)
print(acct == pn)
编辑并运行代码