Abkürzung für Super (Typ (Selbst), Selbst)

8

Ich tue dies oft beim Überschreiben einer Methode in einer Unterklasse:

%Vor%

Meine Frage ist: Gibt es eine Abkürzung für Super (Typ (Selbst), Selbst)?

    
Gary van der Merwe 03.02.2011, 08:26
quelle

1 Antwort

17

Tu das nicht: Wenn super einfach type(self) als erstes Argument verwenden könnte, wäre es nicht so geschrieben worden, dass es zuerst zwei Argumente braucht. Sie müssen hier die eigentliche Klasse übergeben, nicht einen Ausdruck, der sich ändern könnte, wenn die Klasse unterklassifiziert wurde.

Das erste Argument von super muss die Klasse sein, die die aktuelle Methodendefinition enthält, da Sie Super angeben, wo in der Liste der Basen die Suche beginnen soll.

Python 3 weiß das und behandelt super() magisch zur Kompilierzeit, aber in Python 2.x ist es nur eine gewöhnliche Funktion, so dass es keine Möglichkeit gibt, diese Parameter für sich selbst herauszufinden.

[Bearbeiten, um meine ersten Punkte hinzuzufügen] Tatsächlich gibt es eine andere weniger genutzte Möglichkeit, super() in Python 2.x zu verwenden. Sie können eine ungebundene Form von super verwenden und beim Zugriff darauf binden:

%Vor%

Hier gibt es einen wichtigen Haken: Sie müssen einen anderen Namen verwenden, um jedes super -Objekt zu speichern, was Sie mit self.__super tun können, aber Sie können kein ungebundenes super direkt in der Klasse erstellen Definition (weil Sie die Klasse nicht benennen können, wenn sie noch nicht existiert) und wenn Sie sie außerhalb erstellen, müssen Sie den Namen manuell verschleiern, um sicherzustellen, dass Sie das korrekte __super -Objekt für die Klasse gesetzt haben. Für Python 2.6 und höher könnten Sie dies wahrscheinlich als Klassen-Decorator einbinden.

    
Duncan 03.02.2011, 08:38
quelle

Tags und Links