Voglio sapere come chiamare i metodi di sottoclasse nella superclasse.Come chiamare i metodi di sottoclassi in una superclasse in Python
risposta
Questa è una domanda molto ampia. Come non si forniscono codice di esempio, mi limiterò a mostrare l'esempio più semplice:
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)
Da dove proviene 'a'? Dove il metodo 'meth'? –
@Tichodroma Scusa, colpa mia. Dovresti pensare mentre scrivi ;-) corretto ora. – glglgl
Cosa succede se le classi sono in moduli separati? cioè file2.py importazione file1 classe TestCase (file1.TestBase): def execute (self): self.pass() file1.py classe TestBase: def Pass (auto): stampa "PASS" testBase = TestBase() testBase.execute() – ThePracticalOne
Il punto dietro una sottoclasse è che estende e altera il comportamento della superclasse. La superclasse non può sapere come come una sottoclasse la estenderà.
Edit: ma è ben possibile che la superclasse sa, che della sottoclasse si estenderà esso. Non sono sicuro, se questo è un buon design, però.
Ecco quello che ho appena provato:
class A(object):
def x(self):
print self.y()
class B(A):
def y(self):
return 1
>>> B().x()
1
Quindi, a meno che non hai avuto qualche problema specifico, basta chiamare un metodo dalla sottoclasse nella classe base e dovrebbe funzionare.
Mi chiedo perché qualcuno voglia farlo. Perché voglio scrivere 'A' in un modo che anticipi in anticipo come' B' lo estenderà? –
@Tichodroma: Sì, c'è odore di codice qui. Ma forse è per es. il docente dell'OP che è fuori sincrono con la realtà;)? –
@Tichodroma forse non lo sai? Sia 'A' una classe base che può essere estesa, diciamo, a 3 o 4 modi. Non sa come sono implementati, solo quale firma forniscono. Ho visto spesso cose del genere, ad es. in 'MySQLdb'. – glglgl
Penso che questo sia correlato all'utilizzo di metodi astratti. La classe genitore definisce i metodi che la sottoclasse dovrebbe implementare e la classe genitore sa che questi metodi saranno implementati. Strutture simili esistono ad esempio in Java.
L'utilizzo di questi in Python è discusso qui così: Abstract methods in Python
Credo che questo è un modello utilizzato spesso.
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
È un po 'come una classe astratta, ma fornisce un comportamento predefinito. Non riesco a ricordare il nome del modello dalla cima della mia testa però.
Utilizzando la terminologia C++ sarebbe solo un polimorfismo. Ma con Python è vero per tutto ... – matsjoyce
- 1. È possibile chiamare i metodi di sottoclassi su un oggetto superclasse?
- 2. Java: Sottoclassi Force per sovrascrivere i metodi della Superclasse
- 3. Chiamare i costruttori di superclasse in python con diversi argomenti
- 4. 10 Chiamare i metodi di sottoclasse dalla superclasse in un vettore C++
- 5. Nascondere i metodi della superclasse
- 6. Chiamare un metodo di sottoclasse dalla superclasse
- 7. Posso utilizzare una classe C++ in classe Python come superclasse
- 8. Matrice di oggetti della superclasse. Come gestirli come sottoclassi?
- 9. Come chiamare i metodi factory da HTML in angularjs? metodi
- 10. Come accedere ai meta attributi di una superclasse in Python?
- 11. CGLIB non è in grado di intercettare i metodi in una superclasse/superinterfaccia
- 12. Python Cmd, problema sottoclassi
- 13. Come chiamare dinamicamente i metodi di accesso in Ruby
- 14. modo migliore per chiamare metodo della superclasse in ExtJS
- 15. Come chiamare il metodo sovrascritto di una superclasse
- 16. Tipi di sottoclassi incorporati in Python 2 e Python 3
- 17. Come chiamare i metodi sovrascritto in tutte le classi derivate
- 18. Sovrascrivere i metodi di sottoclasse con argomenti sottoclassi?
- 19. Metodi di estensione in Python
- 20. Chiamare magicamente metodi in Java
- 21. Come rilevare il sovraccarico del metodo in sottoclassi in python?
- 22. Chiamare i metodi di attività da Frammento
- 23. Come chiamare correttamente i metodi della classe base (e il costruttore) dalle classi ereditate in Python?
- 24. metodi della superclasse di tornare tipo sottoclasse in rapida
- 25. Python: Come posso creare una sottoclasse da una superclasse?
- 26. Come accedere agli attributi di una classe di una superclasse in Python?
- 27. come evitare i metodi della superclasse sempre sovrascritti per classe sub in obiettivo - c
- 28. Come posso ignorare una superclasse?
- 29. Chiamare la superclasse da un costruttore sottoclasse in Java
- 30. Tipi interni Python sottoclassi
Puoi essere più esplicito con la tua domanda. –