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ì.