2016-11-25 28 views
2

これは私の簡素化クラス割り当てである:Pythonの複素数乗算

class Vector(object): 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

class MyComplex(Vector): 
    def __mul__(self, other): 
     return MyComplex(self.real*other.real - self.imag*other.imag, 
         self.imag*other.real + self.real*other.imag) 

    def __str__(self): 
     return '(%g, %g)' % (self.real, self.imag) 

u = MyComplex(2, -1) 
v = MyComplex(1, 2) 

print u * v 

これが出力されます。

"test1.py", line 17, in <module> 
    print u * v 
"test1.py", line 9, in __mul__ 
return MyComplex(self.real*other.real - self.imag*other.imag, 
       self.imag*other.real + self.real*other.imag) 
AttributeError: 'MyComplex' object has no attribute 'real' 

誤差は明らかですが、私はそれを把握することができなかった、あなたの援助してください!

答えて

2

次へVectorクラスでコンストラクタを変更する必要があります。

class Vector(object): 
    def __init__(self, x, y): 
     self.real = x 
     self.imag = y 

あなたのプログラムに問題はそれがVectorクラスのコンストラクタには、属性ではなく、realimagとしてxyを定義したということでした。

1

あなたの初期設定を忘れてしまったようです。そのため、MyComplexのインスタンスには属性(realまたはimagなど)がありません。 MyComplexにイニシャライザを追加するだけで問題は解決します。

def __init__(self, real, imag): 
    self.real = real 
    self.imag = imag 
+0

このようにすると、 'MyComplex'が' Vector'から継承する必要性を回避することも指摘しておきます。 – Billylegota

1
def __init__(self, x, y): 
    self.x = x 
    self.y = y 
... 
return MyComplex(self.real*other.real - self.imag*other.imag, 
        self.imag*other.real + self.real*other.imag) 
... 
AttributeError: 'MyComplex' object has no attribute 'real' 

あなたの__init__関数に '現実' と 'IMAG' を属性していません。 self.x、self.y属性をself.realとself.imagに置き換える必要があります。