In Python 2.x akzeptiert Super folgende FälleWarum Python Super nicht nur Instanz akzeptieren?
class super(object)
| super(type) -> unbound super object
| super(type, obj) -> bound super object; requires isinstance(obj, type)
| super(type, type2) -> bound super object; requires issubclass(type2, type)
| Typical use to call a cooperative superclass method:
soweit ich sehe, super ist eine Klasse, die Art Verpackung und (schließlich) die Instanz, die übergeordnete Klasse einer Klasse zu lösen.
bin ich ziemlich verwirrt durch ein paar Dinge:
- warum auch gibt es keine
super(instance)
, mit typischer Verwendung z.B.super(self).__init__()
. Technisch gesehen können Sie den Typ eines Objekts vom Objekt selbst erhalten, daher ist die aktuelle Strategiesuper(ClassType, self).__init__()
irgendwie redundant. Ich vermute Kompatibilitätsprobleme mit alten Klassen oder Mehrfachvererbung, aber ich würde gerne Ihren Standpunkt hören. - warum akzeptiert Python 3 (siehe Understanding Python super() with __init__() methods)
super().__init__()
? Ich sehe darin eine Art Magie, die das Explizite verletzt, ist besser als das implizite Zen. Ich hätte passender gesehenself.super().__init__()
.
Ich denke du meinst Klasse B (A): und Klasse C (B): –
Allerdings hast du recht. Es wäre niemals in der Lage, A .__ init __() von B aufzurufen, weil in Methode B .__ init __() self vom Typ C wäre, dessen direkter Super B ist, nicht A. Also würde B .__ init __() erneut aufgerufen werden. –
ah Sie haben Recht mit dem Tippfehler, danke! Und das wird in mehreren Vererbungsschemas noch komplizierter, ich denke, ich kann einen Link dazu finden. – u0b34a0f6ae