[Python] Decoratori a runtime su classe

Matteo Boscolo matteo.boscolo a boscolini.eu
Ven 20 Apr 2012 11:29:45 CEST


Grazie mille per il suggerimento,

l'oggetto poi va a finire in sqlalchemy che internamente usa pickle per 
scrivere l'oggetto nel db. quindi in questo modo dovrebbe funzionare

ciao,
Matteo


Il 20/04/2012 09:54, Marco Giusti ha scritto:
> On Thu, Apr 19, 2012 at 04:47:49PM +0200, Matteo Boscolo wrote:
>> Ciao a tutti
>> devo trasformare gli attributi della mia classe da
>>
>> class myClass(object):
>>      def __init__(self):
>>          self.pippo=10
>>
>> a
>>
>> class myClass(object):
>>      def __init__(self):
>>          self._pippo=10
>>
>> tutto cio per evitare dei problemi di ricorsione con il modulo pickle
>> adesso uso questa tecnica:
> Non mi sembra che pickle abbia tanti problemi con la ricorsione se non
> che "...highly recursive data structure may exceed the maximum recursion
> depth...".
>
> Se il problema è solo per serializzare gli oggetti perché non usare un
> approccio differente? Invece di modificare del codice già esistente
> deleghi ad altri l'ingrato compito. Solo un esempio su come risulterebbe
> il tuo codice:
>
>
> 	class myClass(object):
> 		def __init__(self):
> 			self.pippo=10
>
> 	import zope.interface
> 	from zope.interface.adapter import AdapterRegistry
>
> 	class ISerializable(zope.interface.Interface):
> 		def getObject():
> 			"""Return the original object"""
>
> 	class SerializerMyClass:
> 		zope.interface.implements(ISerializable)
> 		def __init__(self, original):
> 			self._pippo = original.pippo
> 		def getObject(self):
> 			obj = myClass()
> 			obj.pippo = 10
>
> 	registry = AdapterRegistry()
> 	registry.register([declarations.implementedBy(myClass)],
> 			ISerializable, '', SerializerMyClass)
>
> 	###
>
> 	import pickle
> 	s = pickle.dumps(ISerializable(myobj))
> 	myobj = pickle.loads(s).getObject()
>
>
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>



Maggiori informazioni sulla lista Python