frecuencia hago este tipo de cosas:Cuál es la forma correcta para extender un método de la clase padre en Python moderna
class Person(object):
def greet(self):
print "Hello"
class Waiter(Person):
def greet(self):
Person.greet(self)
print "Would you like fries with that?"
La línea Person.greet (auto) no me parece bien. Si alguna vez cambio de qué clase heredará Waiter, voy a tener que rastrear cada uno de estos y reemplazarlos todos.
¿Cuál es la forma correcta de hacerlo es la versión moderna de Python? Tanto 2.x como 3.x, entiendo que hubo cambios en esta área en 3.
Si es importante, generalmente me apego a la herencia individual, pero si se requieren elementos adicionales para acomodar la herencia múltiple correctamente, sería bueno para saber sobre eso.
Aquí hay un enlace de documentación para la versión 3.x de [super()] (http://docs.python.org/py3k/library/functions.html#super). – martineau
Solo para el registro, cuando se refiere a 'Waiter' en la función' super() ', no use el nombre de clase, sino' self .__ class__'. De esta forma, no tendrá que volver a escribir todos sus súper en caso de que cambie el nombre de su clase en el futuro. Me gusta esto (dentro de 'Waiter.greet()'): 'super (self .__ class__, self) .greet()'. –
Me gustaría señalar que a menudo la implementación básica de un método no llamará súper. Por lo tanto, es importante en la herencia múltiple que las clases base para los métodos que está anulando estén más en el MRO que cualquier otra anulación de esos métodos. Esta es la raíz de la regla sobre mixins que se enumeran antes de las bases. Esta condición se garantiza trivialmente si solo hay una clase base y es alcanzable siguiendo al padre más correcto en cada nivel del árbol de herencia. Por ejemplo, si está anulando una clase de Django que sigue a la derecha, los padres siempre deben llevar a la clase de Django. –