[Python] Mutazione di un oggetto dall'interno...

Manlio Perillo manlio_perillo a libero.it
Ven 23 Feb 2007 17:19:38 CET


Massimo ha scritto:
> Si, il subject fa pena, ma non m'è venuto in mente altro...
> Sto cercando di farmi un framework con SQLAlchemy. Vorrei fare in modo 
> che un oggetto (mappato con un mapper su una Table, ma questo poco 
> importa...) disponga di un metodo .read() che legga, appunto, i valori 
> dal dbms.
> 
> Il problema è che qualcos'altro restituisce quell'oggetto una volta 
> caricato. In particolare, funziona:
> 
> caricato = session.query(caricato.__class__).get(pk_tuple)
> 
> Io però ora vorrei scrivere il metodo .read(), qualcosa di simile a:
> 
>     def read(self, keyvalues=None):
>         '''loads the object in memroy'''
> 
>         if keyvalues is None:
>             keyvalues = self.getPkValues()
>         tmp = self.session.query(self.__class__).get(keyvalues)
>         if tmp is not None:
>             # fare qualcosa
> 
> In tmp ho l'oggetto caricato (se esiste, altrimenti None), ma è 
> un'istanza diversa dall'oggetto su cui ho chiamato .read()
> 
> Quello che mi/vi chiedo è se sia possibile (prima di tutto 
> concettualmente) fare in modo che quel "# fare qualcosa" corrisponda a 
> trasformare in toto l'oggetto puntato da self nell'oggetto puntato da tmp.
> Qualche idea o commento?
> 

In linea di massima quello che vuoi fare non mi sembra il modo migliore 
di procedere.

Perchè ti serve una cosa del genere?

Per quanto riguarda la parte tecnina, ricorda che a fini pratici due 
oggetti sono uguali se il loro stato è uguale.

In teoria quindi bastarebbe fare
self.__dict__.update(tmp.__dict__)

Ma non tutto lo stato si trova nel dizionario, ci sono anche le property.
Così su due piedi non so dirti come fare a copiare tutto.


> Grazie,
> Max.
> 
> p.s. ho provato ad iscrivermi alla ml di SQLAlchemy, gestita da google, 
> e ricevo i messaggi ma non riesco a spedirne. Qualcuno l'ha mai usata e 
> mi può gentilmente suggerire "le basi"? Grazie ancora...
> 

Google non ti manda i messaggi che tu hai spedito, come succede in 
questa mailing list, ad esempio.
Hai provavo a vedere dall'interfaccia web?



Saluti  Manlio Perillo


Maggiori informazioni sulla lista Python