gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:04:13 24 4
gpt4 key购买 nike

根据这篇文章:

Python memoising/deferred lookup property decorator

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

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

然而,这两种实现都有一个严重的问题:任何内存的值都将尝试由 python 进行 pickle。如果这些值不可picklable,则会导致程序崩溃。

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

最佳答案

不知道 scala 实现细节,但我想到的最简单的解决方案是,如果您对找到的“惰性属性”库的其他方面感到满意,则可以实现 __getstate____setstate__ 对象方法,如 Pickling and unpickling normal class instances 中所述

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

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

关于python - Python 中 scala 的 '@transient lazy val' 最接近的实现是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40009409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com