Ciao a tutti, ho un dubbio sui python internal. Ecco la situazione; ho due classi:
### class Foo: def __init__(self): self.x= 0 def inc(self): self.x+= 1 class Bar: def __init__(self): self.x= 0 foo=Foo() bar=Bar() ### Poi, eseguo cio' che chiamo un'exporting di classe: ### attr= getattr(foo, 'inc') setattr(bar, 'inc', attr) ### In questo modo la classe `bar` avra' il metodo 'inc', richiamabile tramite `self.inc`. Se a questo punto qualcuno si chiedesse perche' non eredito, la risposta e' la seguente: l'ereditarieta' costringe, per ogni classe, a inizializzare un nuovo padre; queso in genere non e' un problema, ma nel mio caso voglio che le mie classi utilizzino tutte lo *stesso padre*, e non un' istanza ciascuna. A questo punto, ecco cosa succede: ### >>> bar.inc() >>> bar.x 0 >>> foo.x 1 >>> ### In pratica, il metodo inc e' stato chiamato con self=foo, non self=bar, nonostante la classe chiamante sia a tutti gli effetti bar. Mi chiedo: 1- Come viene inizializzato il self? Pensavo che venisse valorizzato in relazione alla classe chiamante, ma quanto sopra dimostra che non e' cois' 2- Come potrei ottenere l'effetto desiderato in maniera elegante? l'obiettivo e' quello di ottenere bar.x=1 e foo.x=0. Una soluzione e' quella di modificare il metodo inc: ### def inc(self, c): c.x+= 1 ### e poi chiamare: ### bar.inc(bar) ### ma questo e' abbastanza trash. Ogni idea e' ben accetta Ciao -- efphe _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python