Wie wird 'float ()' für eine benutzerdefinierte Klasse in Python überladen?

8

Zusammenfassung

Wie kann ich das eingebaute float für meine Klasse überladen, wenn ich also float() für eine Instanz davon anrufe, wird meine benutzerdefinierte Funktion anstatt der Standardfunktion aufgerufen?

Meine Klasse

Hi, ich habe meine eigene Fractions -Klasse programmiert (für beliebig hohe Fließkommaoperationen). Es geht so (ich habe es noch nicht beendet):

%Vor%

Die Frage

Nun möchte ich eine Methode implementieren, die float() überlädt, d. h. sie wird aufgerufen, wenn eine Instanz meiner Klasse an float() übergeben wird. Wie mache ich das? Zuerst dachte ich:

%Vor%

Aber das hat nicht funktioniert. Auch eine Google-Suche oder die Python-Dokumente haben nicht geholfen. Ist es überhaupt möglich, es zu implementieren?

    
Yatharth Agarwal 05.04.2012, 18:39
quelle

1 Antwort

15

Definieren Sie die __float__() spezielle Methode für Ihre Klasse.

%Vor%

Beachten Sie, dass diese Methode ein float zurückgeben muss! Die Berechnung self.num / self.denom gibt standardmäßig eine int in Versionen von Python vor 3.0 zurück, vorausgesetzt beide Operanden sind Ganzzahlen. In diesem Fall würden Sie nur sicherstellen, dass einer der Operanden ein Gleitkomma ist: float(self.num) / self.denom zum Beispiel.

    
kindall 05.04.2012, 18:44
quelle
yii\base\ErrorException
Copied! Copy Stacktrace Search Stackoverflow Search Google Error

PHP Core Warningyii\base\ErrorException

PHP Startup: Unable to load dynamic library 'mongodb.so' (tried: /usr/lib64/php/modules/mongodb.so (/usr/lib64/php/modules/mongodb.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mongodb.so.so (/usr/lib64/php/modules/mongodb.so.so: cannot open shared object file: No such file or directory))

$_GET = [
    'id' => '348659',
    'url' => 'how-to-overload-float-for-a-custom-class-in-python',
];

$_SESSION = [
    '__flash' => [],
];