una resueltos programacion otra orientada objetos metodos metodo llamar importar herencia ejercicios ejemplos clases clase python class inheritance base-class overwrite

resueltos - Herencia de Python: ¿llamar a los métodos de clase base dentro de la clase secundaria?



llamar un metodo python (2)

Me desconcierta que no pueda encontrar una explicación clara de esto en ninguna parte. ¿Por qué y cuándo necesita llamar al método de la clase base dentro del método del mismo nombre de la clase secundaria?

class Child(Base): def __init__(self): Base.__init__(self) def somefunc(self): Base.somefunc(self)

Supongo que haces esto cuando no quieres sobrescribir completamente el método en la clase base. ¿Es eso realmente todo lo que hay?


Depende completamente de la clase y del método.

Si solo desea hacer algo antes / después de que se ejecute el método base o llamarlo con diferentes argumentos, obviamente llame al método base en el método de su subclase.

Si desea reemplazar todo el método, obviamente no lo llama.


Por lo general, lo hace cuando desea ampliar la funcionalidad modificando, pero sin reemplazar completamente un método de clase base. defaultdict es un buen ejemplo de esto:

class DefaultDict(dict): def __init__(self, default): self.default = default dict.__init__(self) def __getitem__(self, key): try: return dict.__getitem__(self, key) except KeyError: result = self[key] = self.default() return result

Tenga en cuenta que la forma adecuada de hacerlo es utilizar super lugar de llamar directamente a la clase base . Al igual que:

class BlahBlah(someObject, someOtherObject): def __init__(self, *args, **kwargs): #do custom stuff super(BlahBlah, self).__init__(*args, **kwargs) # now call the parent class(es)