Weisen Sie der Klassenvariablen in Python eine externe Funktion zu

8

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%     
astrojuanlu 29.06.2016, 10:59
quelle

1 Antwort

14

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:

%Vor%

Alternativ können Sie auch über das Attribut __func__ auf die Methode ungebundene Funktion zugreifen:

%Vor%

oder direkt zum Attribut __dict__ der Klasse gehen, um das Deskriptorprotokoll vollständig zu umgehen:

%Vor%

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.

    
Martijn Pieters 29.06.2016, 11:12
quelle

Tags und Links