Ich versuche eine anderswo definierte Funktion einer Klassenvariablen zuzuordnen, damit ich sie später in einer der Methoden der Instanz aufrufen kann:
%Vor% Das Problem ist, dass dies fehlschlägt, denn wenn self.func()
ausgeführt wird, wird die Instanz als erster Parameter übergeben.
Ich bin mit einem Hack gekommen, aber scheint mir hässlich, hat jeder eine Alternative?
%Vor%Bearbeiten: Das Verhalten ist bei integrierten Funktionen anders!
%Vor%Python-Funktionen sind Deskriptor Objekte und wenn Attribute einer Klasse Wenn Sie auf eine Instanz zugreifen, werden sie als Methoden gebunden.
Wenn Sie dies verhindern möchten, verwenden Sie die Funktion staticmethod
, um die Funktion zu umbrechen in einem anderen Deskriptor, der nicht an die Instanz bindet:
Alternativ können Sie auch über das Attribut __func__
auf die Methode ungebundene Funktion zugreifen:
oder direkt zum Attribut __dict__
der Klasse gehen, um das Deskriptorprotokoll vollständig zu umgehen:
Wie bei math.pow
ist das keine Python -Funktion, da sie in C-Code geschrieben ist. Die meisten eingebauten Funktionen sind in C geschrieben und die meisten sind keine Deskriptoren.
Tags und Links python oop python-2.x