Quiero saber cómo llamar a los métodos de subclase en la superclase.Cómo llamar a los métodos de subclase en una superclase en Python
Respuesta
Esta es una pregunta muy amplia. Como usted no proporciona código de ejemplo, sólo voy a mostrar el ejemplo más sencillo:
class A(object):
def meth1(self, a):
self.meth2(a, a*a)
class B(A):
def meth2(self, a, b):
return b/a
b = B()
b.meth1(10)
¿De dónde viene 'a'? Donde el metodo 'meth'? –
@Tichodroma Lo siento, mi culpa. Debería pensar mientras escribes ;-) Corregido ahora. – glglgl
¿Qué pasa si las clases están en módulos separados? es decir file2.py importación archivo1 clase TestCase (file1.TestBase): ejecutar def (self): self.pass() file1.py clase TestBase: pase def (auto): print "PASS" testBase = TestBase() testBase.execute() – ThePracticalOne
El punto detrás de una subclase es que se extiende y altera el comportamiento de la superclase. La superclase no puede saber cómo una subclase lo extenderá.
Editar: Pero es también posible que la superclase sabe, que la subclase la ampliará. No estoy seguro, si esto es un buen diseño, sin embargo.
Aquí es lo que acabo he intentado:
class A(object):
def x(self):
print self.y()
class B(A):
def y(self):
return 1
>>> B().x()
1
Así que a menos que tuviera algún problema específico, simplemente llamar a un método de la subclase en la clase base y que sólo debería funcionar.
Me pregunto por qué alguien quiere hacer esto. ¿Por qué quiero escribir 'A' de una manera que sepa de antemano cómo' B' lo extenderá? –
@Tichodroma: Sí, aquí huele a código. Pero tal vez es, por ejemplo, el conferencista de OP que no está sincronizado con la realidad;)? –
@Tichodroma tal vez no lo sepas? Deje que 'A' sea una clase base que se puede extender en, digamos, 3 o 4 formas. No sabe cómo se implementan, solo qué firma proporcionan. He visto tales cosas a menudo, p. en 'MySQLdb'. – glglgl
Creo que esto está relacionado con el uso de métodos abstractos. La clase principal define los métodos que la subclase debe implementar y la clase principal sabe que estos métodos se implementarán. Existen estructuras similares, por ejemplo, en Java.
El uso de estos en Python se discute aquí también: Abstract methods in Python
Creo que este es un patrón de uso frecuente.
class A(object):
def x(self):
self.y()
def y(self):
print('default behavior')
class B(A):
def y(self):
print('Child B behavior')
class C(A):
def z(self):
pass
>>>B().x()
Child B behavior
>>>C().x()
default behavior
Es algo así como una clase abstracta, pero proporciona un comportamiento predeterminado. Sin embargo, no recuerdo el nombre del patrón en la parte superior de mi cabeza.
Usando la terminología de C++ sería simplemente polimorfismo. Pero con Python eso es verdad para todo ... – matsjoyce
- 1. Llamar a un método de subclase de la superclase
- 2. Python: ¿Cómo hago una subclase de una superclase?
- 3. ¿Cómo llamar a métodos anulados en una subclase? Posible candidato para la refactorización
- 4. Ocultando los métodos de la superclase
- 5. Subclase - Argumentos de la Superclase
- 6. ¿Cómo evitar los métodos de superclase siendo anulados por subclase en el objetivo - c
- 7. ¿Es posible llamar a los métodos de las subclases en un objeto de superclase?
- 8. foreach objeto heredado (subclase) en una lista de superclase
- 9. ¿Qué métodos puede heredar una subclase en Java?
- 10. Cómo llamar a los métodos definidos en ApplicationController en modelos
- 11. Cómo llamar dinámicamente a los métodos de acceso en Ruby
- 12. Google Maps API V3: subclase google.maps.Marker: cómo llamar a los métodos principales?
- 13. ¿Cuándo necesita llamar explícitamente a un constructor de superclase?
- 14. Obteniendo el nombre de una subclase dentro de una superclase
- 15. MATLAB - enumere todos los métodos suministrados por la subclase solamente?
- 16. llamar a los métodos de delegado opcionales
- 17. ¿Reemplazando los métodos de subclase con argumentos subclase?
- 18. Scala: ¿Cómo puedo implementar un método de clonación en una superclase y usarlo en una subclase?
- 19. Llamar a los métodos DLL desde Javascript
- 20. ¿Cómo acceder a los atributos de clase de una superclase en Python?
- 21. C# declara la subclase como tipo superclase
- 22. ¿Cómo encontrar todos los métodos anulando los métodos de superclase/interfaz sin la anotación @Override?
- 23. llamar a los métodos súper coffeescript
- 24. Llamar a un método de subclase en Java
- 25. conversión explícita de la superclase a la subclase
- 26. ¿Cómo detectar la sobrecarga de métodos en subclases en python?
- 27. Cómo forzar a la subclase a llamar a un método abstracto implementado
- 28. Método de la subclase de llamada de su superclase
- 29. Extendiendo los valores predeterminados de una superclase modelo en Backbone.js
- 30. Android: llamar a métodos personalizados en ContentProvider
Puede ser más explícito con su pregunta. –