Ciao a tutti, con l'obiettivo di capire fino in fondo alcuni aspetti dell'ereditarietà tra classi che non mi sono ancora chiari (pensavo lo fossero), mi sono scritto un esempio forzatamente banale.
#!/usr/bin/python class Super: def __init__(self, nome, cognome, citta): self.nome = nome self.cognome = cognome self.citta = citta self.nome_intero = '%s %s' % (self.nome, self.cognome) def super_meth_1(self): return '%s abita a %s' % (self.nome_intero, self.citta) def get_super_result(self): return self.super_meth_1() class Sub(Super): def __init__(self, indirizzo,cosa_fa): Super.__init__(self, nome, cognome, indirizzo) self.cosa_fa = cosa_fa def sub_meth_1(self): return '%s %s' % (self.nome_intero, self.cosa_fa) def get_sub_meth_1(self): return self.sub_meth_1() if __name__ == '__main__': nome = 'Marco' cognome = 'Ippolito' abita = 'Milano' super_class = Super(nome, cognome, abita) ris_super = super_class.get_super_result() print 'ris_super: ', ris_super cosa = 'suona' sub = Sub(abita, cosa) ris_sub_1 = sub.get_sub_meth_1() print "ris_sub_1: ", ris_sub_1 ris_sub_2 = sub.get_super_result() print "ris_sub_2: ", ris_sub_2 time ./classInheritage2.py ris_super: Marco Ippolito abita a Milano ris_sub_1: Marco Ippolito suona ris_sub_2: Marco Ippolito abita a Milano ora... se modifico la Sub class in questo modo: #!/usr/bin/python class Super: def __init__(self, nome, cognome, citta): self.nome = nome self.cognome = cognome self.citta = citta self.nome_intero = '%s %s' % (self.nome, self.cognome) def super_meth_1(self): return '%s abita a %s' % (self.nome_intero, self.citta) def get_super_result(self): return self.super_meth_1() class Sub(Super): def __init__(self, cosa_fa): Super.__init__(self, nome, cognome, citta) self.cosa_fa = cosa_fa def sub_meth_1(self): return '%s %s' % (self.nome_intero, self.cosa_fa) def get_sub_meth_1(self): return self.sub_meth_1() if __name__ == '__main__': nome = 'Marco' cognome = 'Ippolito' abita = 'Milano' super_class = Super(nome, cognome, abita) ris_super = super_class.get_super_result() print 'ris_super: ', ris_super cosa = 'suona' sub = Sub(cosa) ris_sub_1 = sub.get_sub_meth_1() print "ris_sub_1: ", ris_sub_1 ris_sub_2 = sub.get_super_result() print "ris_sub_2: ", ris_sub_2 l'ouput risulta: ris_super: Marco Ippolito abita a Milano Traceback (most recent call last): File "./classInheritage3.py", line 37, in <module> sub = Sub(cosa) File "./classInheritage3.py", line 18, in __init__ Super.__init__(self, nome, cognome, citta) NameError: global name 'citta' is not defined Cosa differenzia l'attributo "citta" dagli altri attributi ("nome" e "cognome") anche essi presenti in Super class? Qual è il modo corretto per far sì che Sub class erediti da Super class gli attributi "nome, "cognome" e "citta" ? Marco _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python