Отмена выделения объекта после незначительной модификации в классе объекта приводит к неожиданному изменению в отслоенном объекте - PullRequest
0 голосов
/ 13 февраля 2020

При травлении объекта класса 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

Может кто-нибудь помочь мне решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...