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
Aber aus irgendeinem Grund löst die Verwendung der Methode second()
eine Ausnahme aus
Was gibt's?
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:
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.
Tags und Links python