При травлении объекта класса SimpleObject
класс был следующим:
class SimpleObject(object):
def __init__(self, name, ext = ''):
self.name = name
self.ext = ext
l = list(name)
l.reverse()
self.name_backwards = ''.join(l)
return
И объект травления был:
data = SimpleObject('pickle')
data.ext = 'ExtraData'
filehandler = open('data.pickle', 'wb')
pickle.dump(data, filehandler)
Таким образом, после сохранения объекта в data.pickle
file, я изменил класс SimpleObject
, добавив setter для атрибута ext
следующим образом, и сделал атрибут приватным.
Вот измененный класс:
class SimpleObject(object):
def __init__(self, name, ext = ''):
self.name = name
self._ext = ext
l = list(name)
l.reverse()
self.name_backwards = ''.join(l)
return
@property
def ext(self):
return getattr(self, "_ext", None)
@ext.setter
def ext(self, value):
if value == self.ext:
pass
elif not isinstance(value, string_types):
raise TypeError("ID must be a string")
else:
self._ext = value
Теперь, если я удалю объект, хранящийся в файле data.pickle, используя этот отредактированный класс, атрибут ext
теряет свои данные:
pic = open("data.pickle","rb")
dic = pickle.load(pic)
print(dic.name)
print(dic.ext)
print(dic.name_backwards)
Это дает следующий вывод с ext значением None:
pickle
None
elkcip
Может кто-нибудь помочь мне решить эту проблему?