Python 重载加法、减法和乘法运算符

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20507745/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-18 20:37:41  来源:igfitidea点击:

Overloading Addition, Subtraction, and Multiplication Operators

pythonclassvectoroperators

提问by user3014014

How do you go about overloading the addition, subtraction, and multiplication operator so we can add, subtract, and multiply two vectors of different or identical sizes? For example, if the vectors are different sizes we must be able to add, subtract, or multiply the two vectors according to the smallest vector size?

你如何重载加法、减法和乘法运算符,以便我们可以对两个不同或相同大小的向量进行加、减和乘?例如,如果向量的大小不同,我们必须能够根据最小的向量大小对两个向量进行加、减或乘运算吗?

I've created a function that allows you to modify different vectors, but now I'm struggling to overload the operators and haven't a clue on where to begin. I will paste the code below. Any ideas?

我创建了一个允许您修改不同向量的函数,但现在我正在努力重载运算符并且不知道从哪里开始。我将粘贴下面的代码。有任何想法吗?

def __add__(self, y):
    self.vector = []
    for j in range(len(self.vector)):
        self.vector.append(self.vector[j] + y.self.vector[j])
    return Vec[self.vector]

回答by cmd

docshave the answer. Basically there are functions that get called on an object when you add or multiple, etc. for instance __add__is the normal add function.

文档有答案。基本上,当您添加或多个等时,会在对象上调用一些函数,例如__add__是正常的添加函数。

回答by jwodder

You define the __add__, __sub__, and __mul__methods for the class, that's how. Each method takes two objects (the operands of +/-/*) as arguments and is expected to return the result of the computation.

定义__add____sub__以及__mul__对类的方法,这是怎么样。每个方法都需要两个对象(的操作数+/ -/ *)作为参数,并预期返回的计算的结果。

回答by binarysubstrate

Nothing wrong with the accepted answer on this question but I'm adding some quick snippets to illustrate how this can be used. (Note that you could also "overload" the method to handle multiple types.)

这个问题的公认答案没有错,但我添加了一些快速片段来说明如何使用它。(请注意,您也可以“重载”处理多种类型的方法。)



"""Return the difference of another Transaction object, or another 
class object that also has the `val` property."""

class Transaction(object):

    def __init__(self, val):
        self.val = val

    def __sub__(self, other):
        return self.val - other.val


buy = Transaction(10.00)
sell = Transaction(7.00)
print(buy - sell)
# 3.0


"""Return a Transaction object with `val` as the difference of this 
Transaction.val property and another object with a `val` property."""

class Transaction(object):

    def __init__(self, val):
        self.val = val

    def __sub__(self, other):
        return Transaction(self.val - other.val)


buy = Transaction(20.00)
sell = Transaction(5.00)
result = buy - sell
print(result.val)
# 15


"""Return difference of this Transaction.val property and an integer."""

class Transaction(object):

    def __init__(self, val):
        self.val = val

    def __sub__(self, other):
        return self.val - other


buy = Transaction(8.00)
print(buy - 6.00)
# 2