En Python 2.x, super acepta los siguientes casos¿Por qué python super no acepta solo la instancia?
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:
por lo que yo veo, super es una clase, envolviendo el tipo y (eventualmente) la instancia para resolver la superclase de una clase.
estoy bastante desconcertado por un par de cosas:
- por eso tampoco hay
super(instance)
, con el uso típico, por ejemplo,super(self).__init__()
. Técnicamente, puede obtener el tipo de un objeto del propio objeto, por lo que la estrategia actualsuper(ClassType, self).__init__()
es algo redundante. Supongo que hay problemas de compatibilidad con las clases antiguas o la herencia múltiple, pero me gustaría escuchar su punto. - por qué, por otro lado, python 3 aceptará (consulte Understanding Python super() with __init__() methods)
super().__init__()
? Veo algo de magia en esto, violar lo explícito es mejor que el Zen implícito. Hubiera visto más apropiadoself.super().__init__()
.
Supongo que quería decir clase B (A): y clase C (B): –
Sin embargo, tiene razón. Nunca sería capaz de llamar a A .__ init __() desde B, porque en el método B .__ init __() self sería de tipo C, cuyo super directo es B, no A. Entonces, B .__ init __() se llamaría de nuevo. –
ah tienes razón sobre el error tipográfico, ¡gracias! Y esto se vuelve aún más complicado en los esquemas de herencia múltiple, creo que puedo encontrar un enlace sobre eso. – u0b34a0f6ae