Il giorno 13/mar/2011, alle ore 01.36, lex mlist ha scritto: > Ciao a tutti, > > mi trovo in una condizione particolare. > Ho una classe che contiene dei dati, e in questa classe viene istanziata a > sua volta un'oggetto che dovrebbe manipolare i dati contenuti nella classe > stessa. > Mi spiego con un esempio: > > =============================== > class A(object): > def __init__(self): > self.b = B() > self.txt = 'Ciao' > > class B(object): > def saluta(self): > # accedere a self.txt della classe A > pass > =============================== > > Usando i metodi di B() attraverso A().b.saluta() vorrei che fosse stampato il > valore di self.txt > > Potrei ovviamente passargli il valore per parametro, ma il problema è che le > funzioni reali devono manipolare parecchi dati e le funzioni vengono > utilizzate > in più punti del programma, per cui passare ogni volta tutti i dati necessari > si rende scomodo. Cosi pensavo di poter sfruttare il potere > dell'introspezione di Python. > > Ho dato una occhiata al modulo 'inspect' ma purtroppo ho solo trovato come > accedere al caller, e in questo caso, non riesco ad ottenere uno stack > precedente > (probabilmente perchè effettivamente A() non è un caller di B() ma ne crea > solo una istanza, mentre il metodo è chiamato nello scope globale). > > Come potrei risolvere? > L'introspezione mi farebbe comodo, e sarebbe anche utile imparare questa > cosetta :) > Come sempre resto a disposizione per suggerimenti di ogni tipo. >
Siccome la risposta mi sembra banale forse mi sfugge qualcosa: class A(object): def __init__(self): self.b = B(self) self.txt = 'Ciao' class B(object): def __init__(self,parent): self.parent = parent def saluta(self): # accedere a self.txt della classe A print parent.txt Ho frainteso la tua domanda ? G _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python