什么是最接近scala' @transient lazy val'在Python?

时间:2016-10-12 22:29:10

标签: python serialization pickle lazy-evaluation

根据这篇文章:

Python memoising/deferred lookup property decorator

助记符装饰器可用于在类中声明一个惰性属性。甚至有一个官员'可以直接使用的包装:

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

但是,这两个实现都有一个严重的问题:任何记忆的值都将被python尝试腌制。如果这些值不可取消,则会导致程序崩溃。

我的问题是:是否有一种简单的方法可以实现scala" @transient lazy val"声明没有太多的修补?在多次调用的情况下,此声明应记住该属性,并在序列化类/对象后将其删除。

1 个答案:

答案 0 :(得分:1)

不了解scala实施细节,但如果您对“懒惰”属性的其他方面感到满意,我会想到最简单的解决方案。您已找到的库,将实施__getstate____setstate__对象方法,如Pickling and unpickling normal class instances

中所述

这些方法在对象实例(反)序列化期间由pickle / unpickle处理程序调用。

通过这种方式,您可以对序列化对象的属性/属性进行细粒度控制。 您还应该阅读另外两个与pickle相关的方法的相应文档(特别注意__getinitargs__)。 Python反序列化对象初始化差异来自普通__new__& __init__序列