1 Python自学 - 类进阶(运算符:来一个“人 + 人”)
前一章我们已经学过了类的表示形式,它告诉我们怎么定义类的输出。
我们再提出一个问题,整型数有+、-、*、/等运算,整型数是一个对象,我们自己定义的类创建的也是对象,那我们的对象能不能也拥有这些运算能力呢?
比如:人 + 人 会是什么?
1.1 为类定义+运算符
定义+运算符,通过实现__add__()来完成,由于+不是一个合法的标识符,所以定义成员方法时要通过映射一个符合规范的名字,而这个翻译规则是有强制规定的,不是随便拿个名字就能映射到运算符。
class Human:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
def __repr__(self):
return f"Human(name='{self.name}', age={self.age}, gender={self.gender})"
def __add__(self, other):
if isinstance(other, Human):
if self.gender == other.gender :
raise ValueError("我们只支持异性结婚!")
else:
return Couple(self, other)
else:
raise TypeError("我们只支持人类和人类结婚!")
#定义一个夫妻类,一个夫妻包含两个人
class Couple:
def __init__(self, person1, person2):
self.person1 = person1
self.person2 = person2
def __repr__(self):
return f"Couple(person1={self.person1}, person2={self.person2})"
# 创建两个人
person1 = Human("小飞棍", 25, '男')
person2 = Human("小西瓜", 22, '女')
# 使用 + 运算符将两个人组合成一对夫妻
couple = person1 + person2
print(couple)
#输出:Couple(person1=Human(name='小飞棍', age=25, gender=男), person2=Human(name='小西瓜', age=22, gender=女))
上面的示例中,我们定义了夫妻 = 人 + 人这样一个运算,在Human类的__add__()成员方法中返回了一个Couple类的对象。
1.2 其他运算符和约定的函数映射名称
参考前面的+运算符的示例,读者还可以给类实现很多其他的运算符,由于篇幅有限,这里不一一举例,下面将这些运算符和名称映射关系列入表中,供读者参考。
| 二元运算符 | 函数映射名称 |
|---|---|
| + | __add__, __radd__ |
| - | __sub__, __rsub__ |
| * | __mul__, __rmul__ |
| / | __div__, __rdiv__, __truediv__, __rtruediv__ |
| // | __floordiv__, __rfloordiv__ |
| % | __mod__, __rmod__ |
| ** | __pow__, __rpow__ |
| << | __lshift__, __rlshift__ |
| >> | __rshift__, __rrshift__ |
| & | __and__, __rand__ |
| == | __eq__ |
| !=,<> | __ne__ |
| > | __get__ |
| < | __lt__ |
| >= | __ge__ |
| <= | __le__ |
作者声明:本文用于记录和分享作者的学习心得,部分文字或示例来源豆包,由于本人水平有限,难免存在表达错误,欢迎交流和指教!
Copyright © 2022~2024 All rights reserved.
<< 返回目录