[Python] Ereditarietà tra classi: un semplice esempio pratico da chiarire

Daniele Varrazzo piro a develer.com
Ven 21 Nov 2014 18:38:26 CET


On 2014-11-21 17:35, Daniele Varrazzo wrote:
> On 2014-11-21 17:19, Marco Ippolito wrote:
> 
>> class Sub(Super):
>>     def __init__(self, indirizzo,cosa_fa):
>>         Super.__init__(self, nome, cognome, indirizzo)
>>         self.cosa_fa = cosa_fa
> ...
> 
>> ora...
> 
> No, anche prima...
> 
> 
>> se modifico la Sub class in questo modo:
> 
>> class Sub(Super):
>>     def __init__(self, cosa_fa):
>>         Super.__init__(self, nome, cognome, citta)
>>         self.cosa_fa = cosa_fa
> 
> 
> Ne' questo ne' quello di sopra sono corretti. Forse hai delle
> variabili globali che accidentalmente si chiamano nome e cognome ma
> non ne hai una che si chiama citta.

Ah si`, giusto: le variabili sono definite qui:

> if __name__ == '__main__':
> 
>     nome = 'Marco'
>     cognome = 'Ippolito'

Il costruttore accidentalmente pesca questi valori dal namespace 
globale. Questo e` un comportamento sbagliato. Chiamale in un altro modo 
e vedrai che avrai un'eccezione anche nel primo caso.

-- Daniele


Maggiori informazioni sulla lista Python