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)