En Python, considere que tengo el siguiente código:
>>> class SuperClass(object):
def __init__(self, x):
self.x = x
>>> class SubClass(SuperClass):
def __init__(self, y):
self.y = y
# how do I initialize the SuperClass __init__ here?
¿Cómo inicializo el SuperClass __init__en la subclase? Estoy siguiendo el tutorial de Python y no cubre eso. Cuando busqué en Google, encontré más de una forma de hacerlo. ¿Cuál es la forma estándar de manejar esto?

__init__.A partir de python 3.5.2, puede usar:
https://docs.python.org/3/library/functions.html#super
fuente
Use un
superobjeto para asegurarse de obtener el siguiente método (como método enlazado) en el orden de resolución del método. En Python 2, debe pasar el nombre de la clase yselfsuper para buscar el__init__método enlazado :En Python 3, hay un poco de magia que hace
superinnecesarios los argumentos , y como beneficio adicional funciona un poco más rápido:Codificar al padre de la siguiente manera evita que use la herencia múltiple cooperativa:
Tenga en cuenta que
__init__solo puede regresarNone: está destinado a modificar el objeto en el lugar.Alguna cosa
__new__Hay otra forma de inicializar instancias, y es la única forma de subclases de tipos inmutables en Python. Por lo que es necesario si desea subclase
strotupleu otro objeto inmutable.Puede pensar que es un método de clase porque obtiene un argumento de clase implícito. Pero en realidad es un método estático . Así que hay que llamar
__new__conclsforma explícita.Por lo general, devolvemos la instancia
__new__, por lo que si lo hace, también debe llamar a su base a__new__travéssuperde su clase base. Entonces, si usa ambos métodos:Python 3 esquiva un poco la rareza de las súper llamadas causadas por
__new__ser un método estático, pero aún debe pasarclsal__new__método no vinculado :fuente