scala的'@transient lazy val'在Python中最接近的实现是什么?

2024-05-15 22:56:16 发布

您现在位置:Python中文网/ 问答频道 /正文

根据这篇帖子:

Python memoising/deferred lookup property decorator

助记符修饰符可用于在类中声明惰性属性。甚至还有一个“官方”软件包,可以开箱即用:

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

然而,这两个实现都有一个严重的问题:任何存储的值都将被python尝试去pickle。如果这些值不可拾取,则会导致程序崩溃。在

我的问题是:有没有一种简单的方法来实现scala的“@transient lazy val”声明而不需要太多的修改?此声明应在多次调用的情况下记住属性,并在类/对象序列化后删除它。在


Tags: pypi声明属性官方decoratorproperty修饰符lookup
1条回答
网友
1楼 · 发布于 2024-05-15 22:56:16

不知道scala实现的细节,但我想到的最简单的解决方案是实现__getstate__和{}对象方法,如Pickling and unpickling normal class instances中所述

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

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

相关问题 更多 >