Python 面向对象编程进阶
Jake Roach
Data Engineer
class Person:
def __init__(self, name):
self.name = name
def __eq__(self, other):
return self.name == other.name
自定义 == 的功能
__eq__() 魔术方法self 与 otherbryce = Person("Bryce")
orion = Person("Orion")
print(bryce == orion)
False
chuck = Person("Charles Carmichael")
charles = Person("Charles Carmichael")
print(chuck == charles)
True
class Team:
def __init__(self, team_members):
self.team_members = team_members
# 创建两个 Team 对象,并尝试相加
rookies = Team(["Casey", "Emmitt"])
veterans = Team(["Mike", "Chuck"])
dream_team = rookies + veterans
Traceback (most recent call last):
File "<stdin>", line 8, in <module>
TypeError: unsupported operand type(s) for +: 'Team' and 'Team'
class Team:
def __init__(self, team_members):
# team_members 是姓名列表
self.team_members = team_members
def __add__(self, other):
# 相加 Team 对象会得到更大的 Team
return Team(self.team_members + other.team_members)
__add__() 魔术方法重载 +self 和 other 会传入 __add__()team_members 创建新的 Team# 创建两个 Team 对象
rookies = Team(["Casey", "Emmitt"])
veterans = Team(["Mike", "Chuck"])
# 尝试将两个 Team 相加
dream_team = rookies + veterans
print(type(dream_team))
print(dream_team.team_members)
Team
["Casey", "Emmitt", "Mike", "Chuck"]
class Team:
def __init__(self, team_members):
self.team_members = team_members
class Employee:
def __init__(self, name, title):
self.name = name
self.title = title
def __add__(self, other):
# 使用 + 运算符创建包含两位员工姓名的 Team
return Team([self.name, other.name])
如果想通过合并 Employee 对象来创建一个 Team 呢?
Employee 类中实现 __add__Employee 的姓名创建一个新的 TeamEmployee 相加的结果是一个 Team# 创建两个 Employee 对象
anna = Employee("Anna", "Technical Specialist")
jeff = Employee("Jeffrey", "Musician")
# 相加以创建一个团队
audio_team = anna + jeff
print(type(audio_team))
print(audio_team.team_members)
Team
["Anna", "Jeffrey"]
| 运算符 | 魔术方法 | 运算符类型 |
|---|---|---|
| - | __sub__ |
算术 |
| != | __ne__ |
比较 |
| < | __lt__ |
比较 |
| > | __gt__ |
比较 |
| += | __iadd__ |
赋值 |
| and | __and__ |
逻辑 |
| in | __contains__ |
成员 |
| is | __is__ |
身份 |
……还有很多!
Python 面向对象编程进阶