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.
<< 返回目录