Sto lavorando su un programma di grandi dimensioni (più di 10.000 righe di codice).
Di seguito è riportato un esempio (auspicabilmente non troppo semplificato) di un problema che a volte affronterò:
class MyClass1(object):
def func_1(self):
return self.func_2() * 2
class MyClass6(MyClass1):
def func_2(self):
return 10
a = MyClass6().func_1()
print(a) # Prints 20
Devo usare in MyClass1 un metodo che è definito più tardi in MyClass6 .
L'uso di questo codice così com'è funziona perfettamente. Ricevo un avviso abbastanza visibile:

epossoaggiungereuncommentoinmodocheiosappiacosastasuccedendoinfuturonelcasoincuisianecessarioeseguirneildebug.Tuttavia,nonpossousareleopzioninelmioIDEcomeTrovausi,Rinominaecc.
Inalternativa,possoutilizzare@abstractmethod per renderlo esplicito che funct_2 è definito in una classe figlia e le mie opzioni IDE funzionerebbero bene:
import abc
class MyClass1(metaclass=abc.ABCMeta):
@abc.abstractmethod
def func_2(self):
return 'zzzz'
def func_1(self):
return self.func_2() * 2
class MyClass5(MyClass1):
def func_2(self):
return 10
a = MyClass5().func_1()
print(a) # Prints 20
... ma penso che non sia questa la strada da percorrere. Ad esempio ricevo avvisi deboli dal mio IDE per le classi tra MyClass1 e MyClass5 (ad es. "MyClass4 deve implementare il metodo astratto ...").
Domanda:
Qual è il modo giusto per gestire una classe genitore utilizzando un metodo definito in una classe figlia?
Modifica :
Alcuni dettagli aggiuntivi:
MyClass1 non viene mai chiamato da solo. Anche func_2() deve essere definito in MyClass6 perché tutto ciò di cui ha bisogno è definito anche lì.