[Python] Introspezione - Ottenere implicitamente una variabile della classe parent
Giovanni Porcari
giovanni.porcari a softwell.it
Dom 13 Mar 2011 07:36:34 CET
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
Maggiori informazioni sulla lista
Python