首页 > 编程知识 正文

运算符重载 Python

时间:2023-11-22 14:04:08 阅读:296217 作者:MIEN

运算符重载是指通过改变默认的运算符行为,使之适应自定义的对象和数据类型。Python提供了强大的运算符重载机制,可以根据需要自定义对象的运算行为。

一、基本概念

1、运算符重载是一种面向对象编程的技术,它允许我们重新定义对象的运算符行为。

2、在Python中,可以通过定义特殊方法来实现运算符重载,这些特殊方法以双下划线开头和结尾。

二、常用的运算符重载

1、算术运算符重载

class Vector:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return Vector(self.x + other.x, self.y + other.y)

    def __sub__(self, other):
        return Vector(self.x - other.x, self.y - other.y)

v1 = Vector(1, 2)
v2 = Vector(3, 4)

print(v1 + v2)  # 输出:(4, 6)
print(v1 - v2)  # 输出:(-2, -2)

2、比较运算符重载

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    def __lt__(self, other):
        return (self.width * self.height) < (other.width * other.height)

    def __eq__(self, other):
        return (self.width * self.height) == (other.width * other.height)

r1 = Rectangle(2, 3)
r2 = Rectangle(4, 5)

print(r1 < r2)   # 输出:True
print(r1 == r2)  # 输出:False

三、自定义运算符

除了常见的运算符重载之外,Python还允许自定义运算符。进行自定义运算符重载时,需要使用装饰器 @something 来定义自定义运算符的名称。

from functools import total_ordering

@total_ordering
class Employee:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __eq__(self, other):
        return self.age == other.age

    def __lt__(self, other):
        return self.age < other.age

e1 = Employee("Alice", 25)
e2 = Employee("Bob", 30)
e3 = Employee("Charlie", 28)

print(e1 == e2)   # 输出:False
print(e1 < e2)    # 输出:True
print(e1 <= e3)   # 输出:True

四、总结

运算符重载是Python中强大且灵活的特性之一,可以轻松地自定义对象的运算行为。使用运算符重载,我们可以使代码更加简洁、直观,并提高代码的可读性。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。