bc
2013-02-23 13:55:17 UTC
Ho 2 classi distinte che vorrei raggruppare in una terza classe.
Entrambe le classi base hanno un init che vorrei richiamare, ma con il
sistema super(miaclasse,self).__init__() mi richiama solo l'init della
prima (in ordine di inserimento nella lista di ereditarietà) e non ho
trovato una sintassi per fargli richiamare l'altra.
Su google non ho trovato quasi nulla con il caso che cercavo a parte un
vago suggerimento che ho sviluppato nell'esempio riportato piu sotto.
L'esempio Funziona bene e fa quello che mi aspetto, ma ho sempre visto
usare super(...) Volevo sapere se l'invocazione diretta col NOME della
classe genitore è corretta (perché non mi sembra di averlo mai visto)
First.__init__(self, eventuali parametri)
Second.__init__(self, eventuali parametri)
Esempio:
-------------------
class First(object):
def __init__(self, v1):
self.v1=v1
print "first", self.__dict__
print "v1", self.v1
class Second(object):
def __init__(self, v2, v3):
self.v2=v2
self.v3=v3
print "second", self.__dict__
print "v2", self.v2
print "v3", self.v3
class Third(Second, First):
def __init__(self):
Second.__init__(self, 2, 3)
First.__init__(self, 1)
print "third", self.__dict__
print "v1", self.v1
print "v2", self.v2
print "v3", self.v3
---------------------
output:
second {'v2': 2, 'v3': 3}
v2 2
v3 3
first {'v1': 1, 'v2': 2, 'v3': 3}
v1 1
third {'v1': 1, 'v2': 2, 'v3': 3}
v1 1
v2 2
v3 3
Entrambe le classi base hanno un init che vorrei richiamare, ma con il
sistema super(miaclasse,self).__init__() mi richiama solo l'init della
prima (in ordine di inserimento nella lista di ereditarietà) e non ho
trovato una sintassi per fargli richiamare l'altra.
Su google non ho trovato quasi nulla con il caso che cercavo a parte un
vago suggerimento che ho sviluppato nell'esempio riportato piu sotto.
L'esempio Funziona bene e fa quello che mi aspetto, ma ho sempre visto
usare super(...) Volevo sapere se l'invocazione diretta col NOME della
classe genitore è corretta (perché non mi sembra di averlo mai visto)
First.__init__(self, eventuali parametri)
Second.__init__(self, eventuali parametri)
Esempio:
-------------------
class First(object):
def __init__(self, v1):
self.v1=v1
print "first", self.__dict__
print "v1", self.v1
class Second(object):
def __init__(self, v2, v3):
self.v2=v2
self.v3=v3
print "second", self.__dict__
print "v2", self.v2
print "v3", self.v3
class Third(Second, First):
def __init__(self):
Second.__init__(self, 2, 3)
First.__init__(self, 1)
print "third", self.__dict__
print "v1", self.v1
print "v2", self.v2
print "v3", self.v3
---------------------
output:
second {'v2': 2, 'v3': 3}
v2 2
v3 3
first {'v1': 1, 'v2': 2, 'v3': 3}
v1 1
third {'v1': 1, 'v2': 2, 'v3': 3}
v1 1
v2 2
v3 3