2010-09-27 15 views
19

Algo que veo gente que hace todo el tiempo es:Sustitución de métodos de una clase padre

class Man(object): 
    def say_hi(self): 
     print('Hello, World.') 

class ExcitingMan(Man): 
    def say_hi(self): 
     print('Wow!') 
     super(ExcitingMan, self).say_hi() # Calling the parent version once done with custom stuff. 

Algo que nunca he visto gente que hace es:

class Man(object): 
    def say_hi(self): 
     print('Hello, World.') 

class ExcitingMan(Man): 
    def say_hi(self): 
     print('Wow!') 
     return super(ExcitingMan, self).say_hi() # Returning the value of the call, so as to fulfill the parent class's contract. 

Es esto porque me quedo con todo el programadores equivocados, ¿o es por una buena razón?

+24

El valor de retorno de 'ExcitingMan.say_hi()' suele ser demasiado emocionante para la mayoría de los procesadores. – intuited

Respuesta

8

Argumentaría que devolver el valor de devolución del método de la superclase es más prudente (excepto en el raro caso en que el niño quiera suprimirlo). Especialmente cuando no sabes exactamente qué está haciendo Super. De acuerdo, en Python generalmente se puede buscar el método de superclase y averiguar qué hace, pero aún así.

Por supuesto, las personas que escribieron la otra versión podrían haber escrito la clase padre ellos mismos y/o sabían que no tiene valor devuelto. En ese caso, habrían decidido prescindir de una declaración explícita de devolución.

3

Sospecho que, al menos en este caso, porque la función padre no devuelve nada, no tiene sentido devolver el resultado. En general, sin embargo, cuando la función padre devuelve algo, creo que es una buena práctica.

Realmente, si devuelve o no lo que hace la súper clase depende exactamente de lo que quiere que haga el código. Hazlo si es lo que quieres y lo que es apropiado.

5

En el ejemplo que le da al método de clase padre no tiene declaración de devolución explícita y por lo tanto, está devolviendo None. Entonces en este caso no hay un problema inmediato. Pero tenga en cuenta que si alguien modifica al padre para devolver un valor, probablemente ahora necesitemos modificar cada hijo.

Creo que su sugerencia es correcta.

Cuestiones relacionadas