根据这篇文章:
Python memoising/deferred lookup property decorator
助记符装饰器可用于在类中声明一个惰性属性。甚至有一个官员'可以直接使用的包装:
https://pypi.python.org/pypi/lazy
但是,这两个实现都有一个严重的问题:任何记忆的值都将被python尝试腌制。如果这些值不可取消,则会导致程序崩溃。我的问题是:是否有一种简单的方法可以实现scala" @transient lazy val"声明没有太多的修补?在多次调用的情况下,此声明应记住该属性,并在序列化类/对象后将其删除。
答案 0 :(得分:1)
不了解scala实施细节,但如果您对“懒惰”属性的其他方面感到满意,我会想到最简单的解决方案。您已找到的库,将实施__getstate__
和__setstate__
对象方法,如Pickling and unpickling normal class instances
这些方法在对象实例(反)序列化期间由pickle / unpickle处理程序调用。
通过这种方式,您可以对序列化对象的属性/属性进行细粒度控制。
您还应该阅读另外两个与pickle相关的方法的相应文档(特别注意__getinitargs__
)。
Python反序列化对象初始化差异来自普通__new__
& __init__
序列