2017-11-09 8 views
-2

Tag! Ich war die post beantworten und versuchen Klasse zu schaffen, wo __str__ mit meinem __str__ so ersetzt:Wie ersetzt man super() .__ str___?

from decimal import * 

class Zar(Decimal): 
    def __init__(self, z): 
     self.__z = Decimal(z) 

    def __str__(self): 
     return 'R{!r}'.format(self.__z) 

    def __repr__(self): 
     return 'R{!r}'.format(self.__z) 

z1 = Zar(3.62) 
z2 = Zar(4.12) 
z = Zar(z1 + z2) 
print('{:.3f}'.format(z)) 
print(z) 

Ich erwartete Ausgabe wie R7.740, aber es funktioniert nicht. Bitte - sagen - wie nachladen str Methode für Standard-Klasse? Es ist so langweilig alle + zu tun -/* ... Methoden

Jetzt habe ich Ausgang:

7.740 
RDecimal('7.740000000000000213162820728') 
+1

Was meinst du mit "Es funktioniert nicht"? Ein "Format" mit einem Format spezifiziert natürlich nicht "__str__" und "__repr "__. –

+5

'z' ist kein' Zar'. – user2357112

+4

Warum erben Sie von 'Decimal' * und * mithilfe von Komposition, um eine Instanz von' Decimal' zu umbrechen? – chepner

Antwort

1

Sie erhalten RDecimal(...) statt R... wegen der Formatierung Zeichenfolge, die Sie gewählt haben, nicht weil Sie mit der Decimal.__str__.

In [1]: import decimal 

In [2]: a = decimal.Decimal(3.62) 

In [4]: str(a) 
Out[4]: '3.62000000000000010658141036401502788066864013671875' 

In [5]: repr(a) 
Out[5]: "Decimal('3.62000000000000010658141036401502788066864013671875')" 

In [6]: 'R{!r}'.format(a) 
Out[6]: "RDecimal('3.62000000000000010658141036401502788066864013671875')" 

In [7]: 'R{}'.format(a) 
Out[7]: 'R3.62000000000000010658141036401502788066864013671875' 

Also, wenn Sie nur Ihre __str__ Definition return 'R{}'.format(self.__z) ändern, sollten Sie in Ordnung sein.