[python] pickle
Martin Blazik
martin.blazik na premiumsms.cz
Středa Březen 29 16:01:12 CEST 2006
Jeste teda jeden dotaz :)
Ma nekdo zkusenosti se serializaci a new style class obecne? Na rozdil
od stareho typu trid mi nechodi pomerne dost veci a nemuzu najit na
inetu krome hromady nic nerikajici dokumentace zadne konkretni priklady.
Elaboruju s __reduce__(), __getnewargs__(), __setstate__() i
__getstate()__, ale neprinasi to kyzene vysledky. Uplne nejlepsi by byl
fungujici prikladek serializace tridy odvozene od object. Za vsechny
pripominky budu vdecny.
lachtan
Martin Blazik napsal(a):
>Cusik,
>nesetkal se nahodou jiz nekdo se serializaci instance ve ktere mam
>atributy, ktere ukazuji na staticke metody tridy? Nedari se mi to
>serializovat. Tady konkretne to muzu obejit, ze metodu noconv udelam
>nestatickou, ale mam i jina mista, kde to nelze.
>Ukazka kde to nechodi:
>
>class TypeDict(dict):
> """ Slovnik, ktery je schopny kontrolovat typ vkladanych dat """
>
> def __init__(self, strict = False):
> """ strict - urcuje chovani pri pouziti neregistrovaneho klice
> True - lze pouzivat jen registrovane klice
> False - konverzni funkce se zalozi automaticky jako TypeDict.noconv
> """
> super(TypeDict, self).__init__()
> self.__convert = {}
> self.__strict = bool(strict)
>
> def setkey(self, key, convert):
> self.__convert[key] = convert
> if key in self:
> TypeDict.__setitem__(self, key, self[key])
>
> @staticmethod
> def noconv(value):
> return value
>
> def __setitem__(self, key, value):
> if key not in self.__convert:
> if self.__strict:
> raise KeyError(key)
> else:
> self.setkey(key, TypeDict.noconv)
> super(TypeDict, self).__setitem__(key, self.__convert[key](value))
>
>
>import pickle
>dct = TypeDict()
>dct['key'] = 'netusim'
># ted je pro 'key' nastavena konverzni funkce TypeDict.noconv
>pickle.dumps(dct)
>....
>pickle.PicklingError: Can't pickle <function noconv at 0x402f42cc>: it's
>not found as typedict.noconv
># navic ji ocividne hleda na jinem miste nebot aboslutni umisteni je
>typedict.TypeDict.noconv
>
>lachtan
>
>_______________________________________________
>Python mailing list
>Python na py.cz
>http://www.py.cz/mailman/listinfo/python
>
>
>
Další informace o konferenci Python