2016-12-16 4 views
0

Ich baue einen Typen (dual numbers) und kann den Weg nicht finden, sie Ausdrücke schön in der Arithmetik zu machen verhalten, wie die komplexen Zahlen in Python zu tun:Automatische Konvertierung Benutzer definiert Typen in Python

>>> 2 + 3 + 7j 
>>> 5 + 7j 

in meinem Fall:

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

ich kann es leicht in funktioniert, manipuliert __add__method, die andere Art und Weise. meine Art + gebaut in I, auch tun kann, es macht externe Funktionsparameter hinzufügen und vorbei, aber, Offensichtlich ist eine gute Integration mit "+" viel besser.
Vielen Dank im Voraus. PS Wo finde ich Quellcode von Python-Modulen (ich könnte selbst in einer komplexen Klasse suchen)?

+2

Überprüfen Sie ['__radd__] (https://docs.python.org/3/reference/datamodel.html#object.__radd__) – niemmi

+0

@niemmi: Das sieht gut aus, wird es überprüfen. –

+0

@niemmi: das ist cool, nur überprüfen, funktioniert für die Addition, mit ein paar Tricks für unsymmetrische Operatoren auch! –

Antwort

0

In Python gibt es keine automatische Typkonvertierung in benutzerdefinierte Typen.

Sie müssen die Methoden _add__ und __radd__, __sub__ und __rsub__ usw. implementieren, um das Verhalten numerischer Typen zu emulieren.

Eine Liste der magischen Methoden, die Sie implementieren müssen, finden Sie unter the Language Reference.

Sie können den Quellcode von CPython unter https://hg.python.org/ finden.

0

Nicht sicher Sie können dies tun. Diese werden als integrierte Typen bezeichnet, und Sie können sie nicht erweitern. Aber Sie können etwas tun:

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 Aktion:

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

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

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

Natürlich werden Sie haben alle anderen wesentlichen Funktionen zu implementieren.

Verwandte Themen