Python自学 - 类进阶(运算符:实现“人 + 人”)

发布于:2025-02-10 ⋅ 阅读:(42) ⋅ 点赞:(0)

<< 返回目录

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