运算符重载:比较

Python 面向对象编程

Alex Yarosh

Content Quality Analyst @ DataCamp

对象相等性

class Customer:
  def __init__(self, name, balance):
    self.name, self.balance = name, balance  


customer1 = Customer("Maryam Azar", 3000)
customer2 = Customer("Maryam Azar", 3000)

customer1 == customer2
False
Python 面向对象编程

对象相等性

class Customer:
  def __init__(self, name, balance, id):
    self.name, self.balance = name, balance
    self.id = id    

customer1 = Customer("Maryam Azar", 3000, 123)
customer2 = Customer("Maryam Azar", 3000, 123)
customer1 == customer2
False
Python 面向对象编程

变量是引用

customer1 = Customer("Maryam Azar", 3000, 123)
customer2 = Customer("Maryam Azar", 3000, 123)
print(customer1)
<__main__.Customer at 0x1f8598e2e48>
print(customer2)
<__main__.Customer at 0x1f8598e2240>
Python 面向对象编程

自定义比较

import numpy as np

# 两个不同的数组,数据相同
array1 = np.array([1,2,3])
array2 = np.array([1,2,3])

array1 == array2
True
Python 面向对象编程

重载 __eq__()

class Customer:
  def __init__(self, id, name):
    self.id, self.name = id, name

# 使用 == 时会调用 def __eq__(self, other):
# 调试输出 print("__eq__() is called") # 若所有属性匹配则返回 True return (self.id == other.id) and \ (self.name == other.name)

 

 

  • 使用 == 比较该类的两个对象时会调用 __eq__()
  • 接受两个参数:selfother——要比较的对象
  • 返回布尔值
Python 面向对象编程

对象的比较

# 两个相等的对象

customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(123, "Maryam Azar")

customer1 == customer2
__eq__() is called
True
# 两个不相等的对象——id 不同

customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(456, "Maryam Azar")

customer1 == customer2
__eq__() is called
False
Python 面向对象编程

其他比较相关方法

运算符 方法
== __eq__()
!= __ne__()
>= __ge__()
<= __le__()
> __gt__()
< __lt__()
  • __hash__():用于将对象作为字典键或放入集合
Python 面向对象编程

Passons à la pratique !

Python 面向对象编程

Preparing Video For Download...