Исключите поле объекта из соления в Python

Я хотел бы постараться не солить определенных полей в экземпляре класса. В настоящее время прежде, чем засолить я просто установил те поля ни на Один, но интересно, существует ли более изящное решение?

22
задан sth 27 February 2010 в 02:36
поделиться

2 ответа

Одним из способов обработки атрибутов экземпляра, которые не являются выбираемыми объектами, является использование специальных методов, доступных для изменения состояния экземпляра класса: getstate () и setstate (). Вот пример

class Foo(object):

    def __init__(self, value, filename):
        self.value = value
        self.logfile = file(filename, 'w')

    def __getstate__(self):
        """Return state values to be pickled."""
        f = self.logfile
        return (self.value, f.name, f.tell())

    def __setstate__(self, state):
        """Restore state from the unpickled state values."""
        self.value, name, position = state
        f = file(name, 'w')
        f.seek(position)
        self.logfile = f

. Когда экземпляр Foo обрабатывается, Python обрабатывает только возвращенные ему значения при вызове метода экземпляра getstate (). Аналогичным образом, во время распаковки Python предоставит неотобранные значения в качестве аргумента методу setstate () экземпляра. Внутри метода setstate () мы можем воссоздать файловый объект на основе выбранной нами информации об имени и позиции и назначить файловый объект атрибуту файла журнала экземпляра.

Ссылка: http://www.ibm.com/developerworks/library/l-pypers.html

34
ответ дан 29 November 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: