2017-03-24 5 views
4

プログラミング私は、PythonのOOPプログラミングに新しいです。私は(演算子のオーバーロードにスクロールダウン)hereから演算子をオーバーロードする上でこのチュートリアルをやっていました。私はこのコードを理解できませんでした。誰かがこれについて詳しく説明してくれることを願っています。正確に言うと、私はどのように理解していなかったここに追加された2つのオブジェクトであり、ラインここでやっPythonのOOPは

def __str__(self): 
      return 'Vector (%d, %d)' % (self.a, self.b)   
def __add__(self,other): 
      return Vector(self.a + other.a, self.b + other.b) 

は何ですか?


#!/usr/bin/python 

class Vector: 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 

    def __str__(self): 
     return 'Vector (%d, %d)' % (self.a, self.b) 

    def __add__(self,other): 
     return Vector(self.a + other.a, self.b + other.b) 

v1 = Vector(2,10) 
v2 = Vector(5,-2) 
print v1 + v2 

これは、出力ベクトル(7,8)を生成します。オブジェクトv1とv2はここでどのように追加されますか?

+2

[特殊メソッド名](https://docs.python.org/3/reference/datamodel.html#special-method-names) – wwii

+2

これらのような状況では、コードをステップバイステップで実行するのが良い方法です、デバッガで。それはあなたが思っていたよりもはるかに多くの情報を明るくします。基本的には、各操作が何をしているのかを見て回ります。 –

答えて

5

v1 + v2は、v1.__add__(v2)のコールとして扱われ、self == v1other == v2となります。

2

これは、Pythonのデータモデルあり、あなたの質問に回答されv1 + v2が行われた場合here

は基本的にPythonが内部的にこのコードv1.__add__(v2)

2

を行い、ベクトル加算、あなたが紙の上に二つのベクトルを追加するのと同じ方法を実行していますスカラー加算を使用して対応するコンポーネントを結合します。あなたはまた、あなたのクラスのために実施すべきか通訳 を伝えるために__add__メソッドをオーバーライドしています。

コード:

self.a + other.a 

は、あなたのベクトルクラスの構成要素を兼ね備えています。コード:

self.b + other.b 

は、タイプbの適切な加算関数を使用してベクトルクラスのb成分を結合します。

これらの新しいコンポーネントの値は、新たなベクトルを返すために、Vectorクラスのコンストラクタに渡されます。

オペレータは、クラスの__add__メソッドを呼び出して追加を実行します。