Python: Funktionen, die von itemgetter () zurückgegeben werden, funktionieren nicht wie erwartet in Klassen

8

Die Funktion operator.itemgetter () funktioniert folgendermaßen:

%Vor%

BEARBEITEN Ich habe diesen Teil hinzugefügt, um die Inkonsistenz hervorzuheben

%Vor%

Jetzt habe ich diese Klasse

%Vor%

Der Zugriff auf das zweite Element mit seinem Index funktioniert

%Vor%

Und auch den Zugriff über die Methode mysecond

%Vor%

Aber aus irgendeinem Grund löst die Verwendung der Methode second() eine Ausnahme aus

%Vor%

Was gibt's?

    
mike_e 18.01.2012, 07:03
quelle

2 Antworten

7

obj.second ist die Funktion getseconditem . Eine Funktion, die erwartet, dass ein Argument bearbeitet wird. Da Sie obj.second ohne Argumente aufrufen, wird der von Ihnen angegebene Fehler ausgelöst. Um es zu lösen, können Sie obj.second(obj.items) oder second anders definieren:

%Vor%

Bearbeiten

Es ist klar, was Sie jetzt meinen, nachdem Sie Ihre Frage bearbeitet haben. Ich denke, hier geht es darum, dass getseconditem keine benutzerdefinierte Funktion ist, die beim Zugriff auf obj.second nicht in eine Methode umgewandelt wird. Es bleibt einfach eine Funktion. Das Folgende finden Sie in der docs :

  

Beachten Sie, dass die Transformation vom Funktionsobjekt in (ungebunden oder   gebundenes) Methodenobjekt passiert jedes Mal, wenn das Attribut abgerufen wird   die Klasse oder Instanz. In manchen Fällen ist eine fruchtbare Optimierung zu   Weisen Sie das Attribut einer lokalen Variablen zu und rufen Sie diese lokale Variable auf.    Beachten Sie auch, dass diese Umwandlung nur für benutzerdefinierte erfolgt   Funktionen; andere aufrufbare Objekte (und alle nicht aufrufbaren Objekte) sind   ohne Umwandlung abgerufen.

    
Rob Wouters 18.01.2012, 07:06
quelle
1

scheint das Problem im folgenden zu sein:

%Vor%

Mit anderen Worten, eine Funktion kann gebunden werden, aber eine aufrufbare Funktion kann nicht.

    
newtover 18.01.2012 07:18
quelle

Tags und Links