2016-10-12 5 views
1

Согласно этому сообщению:Какова ближайшая реализация scala '@transient lazy val' в Python?

Python memoising/deferred lookup property decorator

Мнемоника декоратор может быть использован, чтобы объявить ленивое свойство в классе. Существует даже «официальный» пакет, который может быть использован из коробки:

https://pypi.python.org/pypi/lazy

Однако оба этих реализаций имеют серьезные проблемы: любое сохраненные в памяти значения будет попытки мариноваться на питоне. Если эти значения являются неуправляемыми, это приведет к поломке программы.

Мой вопрос: есть ли простой способ реализовать декларацию «@transient lazy val» от scala без чрезмерного вмешательства? Это объявление должно помнить свойство в случае множественного вызова и отбрасывать его после сериализации класса/объекта.

ответ

1

Не знаю деталей реализации scala, но самое легкое решение приходит мне на ум, если вы удовлетворены другими аспектами библиотеки «lazy property», которые вы нашли, будут реализовывать методы объектов __getstate__ и __setstate__, как описано in Pickling and unpickling normal class instances

Эти методы вызываются обработчиком pickle/unpickle во время сериализации экземпляра объекта (de).

Таким образом, вы можете иметь мелкозернистый контроль того, как/какие атрибуты вашего объекта сериализуются. Вы также должны прочитать соответствующую документацию по другим двум методам, связанным с рассолом (позаботьтесь о __getinitargs__). Python десериализован инициализации объектов differes от общего __new__ & __init__ последовательности

+0

Я думал об этом, но я не могу найти реализацию __getstate__ в суперкласс в качестве точки отсчета, плюс, точка декоратора является простота, если декоратор не может повлиять маринование композиции сама по себе, то я не думаю, что это очень удобный декоратор. – tribbloid

+0

, как указано в документации на пикет Python: 'Если метода __getstate __() нет, то __dict__ экземпляра маринован. Таким образом, вы можете просто рассортировать/расклеивать суперкласс '__dict__' самостоятельно. Способность обрабатывать такие свойства только декораторами ... Хм, я не уверен в этом – agg3l