如何创建不是属性/属性的惰性变量?

2024-10-04 01:26:25 发布

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

在这一点上,我发现了几个用于延迟计算的属性/属性(也称为缓存方法)的python实现,包括:

还有更多。它们都有简短的实现,可以用作类方法的装饰器。但是,它们也有相同的限制:它们不能用于类外的函数。你知道吗

这是一个例子:

from torch.distributions.utils import lazy_property

@lazy_property
def lazyFn():
    return 3

v = lazyFn

type(v)

这个简短的程序将产生以下结果:

<torch.distributions.utils.lazy_property at ...

而不是正确的3

由于python没有包对象(或singleton对象)的概念,这使得lazy求值的使用受到严重限制。我想知道是否有一个同样简单的实现可以支持这一点,或者它是不可能的,因为引擎的限制?你知道吗

更新:我还在寻找一个python实现,它可以在类外支持类似的@property用例,但没有用。这个用例很重要,因为一些大规模的代码重构要求我在不影响其接口签名的情况下在函数和变量之间进行选择。(或者更简单地说:我想调用一个不使用括号的函数)

我现在正在使用python3.8。你知道吗


Tags: 对象方法函数httpsio属性readthedocsutils