Python运算符重载介绍

Python运算符重载介绍

运算符重载(Operator Overloading)允许程序员对现有的运算符进行重新定义,使其能够适用于自定义的数据类型和类。在Python官方文档中,通常将运算符重载称之为"Emulating numeric types"或者"Emulating container types"。它的意义是通过特殊方法(add、mul、__getitem__等)使得用户自定义的类对象可以模拟数字类型或容器类型的行为。https://docs.python.org/3/reference/datamodel.html#emulating-numeric-types

在 Python 中,可以通过在自定义类中定义特殊的方法来实现运算符重载。运算符重载也称为操作符重载。操作符重载是指通过定义特定的方法,让自定义对象能够使用内置操作符进行运算。通过操作符重载,您可以为不同的对象类型定义不同的运算规则,使得对象之间的运算更加灵活和直观。

在Python中,使用特殊方法(也称为魔术方法或双下划线方法)来实现运算符重载。这些特殊方法的名称是预定义的,以双下划线开头和结尾,并与相应的运算符相对应(例如,加法操作的特殊方法是__add__())

例如,add()方法可以被定义来重载"+"运算符。当对应的实例进行加法操作时,Python将自动调用__add__()方法来执行其自定义行为。同样,sub()、mul()和__div__()等方法也可以用来重载其他的运算符。

下面是重载"+"运算符实现向量加法的示例源码:

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)

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

print(v3.x, v3.y) # 输出:4 6

这段代码的功能是创建一个名为 Vector 的自定义类,用于表示二维向量。该类重载了 __add__ 方法——重载"+"运算符,允许对两个 Vector 类型的实例进行加法运算。当尝试对两个向量对象进行加法运算时,Python 会自动调用 __add__ 方法,从而实现向量之间的加法运算。

作为对比,下面改用C++或Java实现重载"+"运算符实现向量加法的源码。

★使用 C++ 实现重载"+"运算符实现向量加法:

#include <iostream>
using namespace std;
 
class Vector {  
public:  
    Vector(int x, int y) : x(x), y(y) {}

    Vector operator+(const Vector& other) const {  
        return Vector(x + other.x, y + other.y);  
    }

    int getX() const {  
        return x;  
    }

    int getY() const {  
        return y;  
    }

private:  
    int x;  
    int y;  
};

int main() {  
    Vector v1(1, 2);  
    Vector v2(3, 4);  
    Vector v3 = v1 + v2;

    cout << v3.getX() << " " << v3.getY() << endl; // 输出:4 6  
    return 0;  
}

★使用 Java 实现重载"+"运算符实现向量加法:

public class Vector {  
    private int x;  
    private int y;

    public Vector(int x, int y) {  
        this.x = x;  
        this.y = y;  
    }

    public Vector add(Vector other) {  
        return new Vector(x + other.x, y + other.y);  
    }

    public int getX() {  
        return x;  
    }

    public int getY() {  
        return y;  
    }

    public static void main(String[] args) {  
        Vector v1 = new Vector(1, 2);  
        Vector v2 = new Vector(3, 4);  
        Vector v3 = v1.add(v2);

        System.out.println(v3.getX() + " " + v3.getY()); // 输出:4 6  
    }  
}

OK!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值