2016-12-16 8 views
0

私はタイプ(dual numbers)を構築していますタイプを定義し、それらをPythonで複素数のように、算術式の中でうまく動作させるための方法を見つけることができません。自動変換を行うPythonの

>>> 2 + 3 + 7j 
>>> 5 + 7j 
私の場合は

>>> 3 + 4 + 5e 
>>> obvious type error 

は、私は簡単にそれが、中に仕事__add__methodを操作することができ、他の方法:私のタイプ+ Iは、また、それはしかし、外部関数を追加することとパラメータを渡す行うことができますに建てられ、明らかに、+との良い統合ははるかに優れています。
ありがとうございます。 PSどこのPythonモジュールのソースコードが見つかりましたか?

+2

[__radd__](https://docs.python.org/3/reference/datamodel.html#object.__radd__)を確認してください。 – niemmi

+0

@niemmi:これはうまくいくように見えます。 –

+0

@niemmi:これはクールで、ちょうどチェック、非対称的なオペアのためのいくつかのトリックと、追加のために働く! –

答えて

0

Pythonでユーザー定義型に自動的に型変換するものはありません。

数値型の動作をエミュレートするには、_add__および__radd__,__sub__および__rsub__などのメソッドを実装する必要があります。

実装する必要がある魔法のリストについては、the Language Referenceを参照してください。

CPythonのソースコードはhttps://hg.python.org/です。

0

わかりませんこれを行うことができます。これらは組み込み型と呼ばれ、拡張することはできません。アクションで

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

    def __repr__(self): 
     return "{} + {}e".format(self.a, self.b) 

    def __add__(self, other): 
     if isinstance(other, ENumber): 
      return ENumber(self.a + other.a, self.b + other.b) 

:しかし、あなたがこのような何か行うことができます。もちろん、

In [15]: x = ENumber(1, 1) 

In [16]: y = ENumber(2, 2) 

In [17]: x+y 
Out[17]: 3 + 3e 

を、あなたも他のすべての重要な機能を実装する必要があります。

関連する問題