異なる、または同じサイズの2つのベクトルを加算、減算、乗算できるように、加算、減算、乗算演算子をオーバーロードするにはどうすればよいですか?たとえば、ベクトルのサイズが異なる場合、2つのベクトルを最小のベクトルサイズに従って加算、減算、または乗算できる必要がありますか?
さまざまなベクトルを変更できる関数を作成しましたが、今は演算子をオーバーロードするのに苦労しており、どこから始めればよいのかわかりません。以下のコードを貼り付けます。何か案は?
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]
あなたは クラスの__add__
、__sub__
、および__mul__
メソッドを定義します。それが方法です。各メソッドは2つのオブジェクト(+
/-
/*
のオペランド)を引数として取り、計算の結果を返すことが期待されています。
docs 答えがあります。基本的に、追加または複数の場合などにオブジェクトで呼び出される関数があります。たとえば、__add__
は通常の追加関数です。
この質問に対する受け入れられた回答に問題はありませんが、これを使用する方法を示すためにいくつかの簡単なスニペットを追加しています。 (メソッドを「オーバーロード」して複数の型を処理することもできます。)
"""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