2013-12-10 5 views
7

Как вы перегружаете оператор сложения, вычитания и умножения, чтобы мы могли добавлять, вычитать и умножать два вектора разных или одинаковых размеров? Например, если векторы имеют разные размеры, мы должны иметь возможность добавлять, вычитать или умножать два вектора в соответствии с наименьшим размером вектора?Операторы перегрузки, вычитания и умножения

Я создал функцию, которая позволяет изменять разные векторы, но теперь я изо всех сил пытаюсь перегрузить операторы и не знаю, с чего начать. Я вставлю код ниже. Есть идеи?

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] 

ответ

4

docs есть ответ. В основном есть функции, которые вызываются на объект при добавлении или несколько и т. Д., Например, __add__ - это нормальная функция добавления.

12

Вы define the __add__, __sub__, and __mul__ методы для класса, вот как. Каждый метод принимает два объекта (операнды +/-/*) в качестве аргументов и, как ожидается, вернет результат вычисления.

+0

хорошо, я понимаю, что сейчас. Спасибо. Как я могу определить их в этом коде? 'self.vector [index] .__ add __ (self, x)' ??? – user3014014

+1

@ user3014014: Точно так же вы определили другие методы; просто вставьте их в определение класса. – jwodder

+0

будет 'def __add __ (self, x, y)' иметь 2 аргумента, подобных этому? – user3014014

1

Ничего плохого в принятом ответе на этот вопрос, но я добавляю несколько быстрых фрагментов, чтобы проиллюстрировать, как это можно использовать. (Обратите внимание, что вы могли бы также "перегрузки" метод для обработки нескольких типов.)


"""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 
Смежные вопросы