根据这篇帖子:
Python memoising/deferred lookup property decorator
助记符修饰符可用于在类中声明惰性属性。甚至还有一个“官方”软件包,可以开箱即用:
https://pypi.python.org/pypi/lazy
然而,这两个实现都有一个严重的问题:任何存储的值都将被python尝试去pickle。如果这些值不可拾取,则会导致程序崩溃。在
我的问题是:有没有一种简单的方法来实现scala的“@transient lazy val”声明而不需要太多的修改?此声明应在多次调用的情况下记住属性,并在类/对象序列化后删除它。在
不知道scala实现的细节,但我想到的最简单的解决方案是实现}对象方法,如Pickling and unpickling normal class instances中所述
__getstate__
和{这些方法在对象实例(de)序列化期间由pickle/unpickle处理程序调用。在
通过这种方式,您可以对对象的哪些属性进行序列化的方式进行细粒度控制。 您还应该阅读另外两个与pickle相关的方法的相应文档(特别注意
__getinitargs__
)。 Python反序列化对象初始化与常见的__new__
&;__init__
序列不同相关问题 更多 >
编程相关推荐