[python] pickle
Martin Blazik
martin.blazik na premiumsms.cz
Středa Březen 29 10:24:47 CEST 2006
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
Další informace o konferenci Python