我正在用python写一个类,并且我有一个属性,该属性将花费相对较长的时间来计算,因此 我只想执行一次 。此外,它会不会被类的每个实例需要的,所以
我不想在默认情况下做到这一点 在__init__
。
我是Python的新手,但不是编程人员。我可以想出一种很容易做到这一点的方法,但是我一遍又一遍地发现,“
Pythonic”做事的方法通常比我在其他语言中的经验要简单得多。
在Python中是否有“正确”的方法来做到这一点?
Python≥3.8
@property
并@functools.lru_cache
已合并为@cached_property
。
import functools
class MyClass:
@functools.cached_property
def foo(self):
print("long calculation here")
return 21 * 2
Python≥3.2 <3.8
您应该同时使用@property
和@functools.lru_cache
装饰器:
import functools
class MyClass:
@property
@functools.lru_cache()
def foo(self):
print("long calculation here")
return 21 * 2
该答案有更详细的示例,还提到了先前Python版本的反向移植。
Python <3.2
Python
Wiki具有一个缓存的属性装饰器(由MIT许可),可以这样使用:
import random
# the class containing the property must be a new-style class
class MyClass(object):
# create property whose value is cached for ten minutes
@cached_property(ttl=600)
def randint(self):
# will only be evaluated every 10 min. at maximum.
return random.randint(0, 100)
或者其他提及的任何实现都可以满足您的需求。
或上述反向端口。
问题内容: 我正在写一个轻量级的类,其属性旨在可公开访问,并且有时仅在特定的实例中被覆盖。就此而言,Python语言中没有为类属性或任何类型的属性创建文档字符串的规定。记录这些属性的预期方式和受支持方式是什么?目前,我正在做这种事情: 这将导致该类的docstring包含初始的标准docstring部分,以及通过对的扩展分配为每个属性添加的行。 尽管在文档字符串样式指南中似乎并未明确禁止使用这种样
问题内容: 在下面的python脚本中,为什么要执行第二个断言(即,将0加到257并将结果存储在y中,则x和y成为不同的对象)?谢谢! 问题答案: 整数是不可变的,因此任何更改它们的操作都将导致新的内存位置 正在检查对象的实际内存位置…并且基本上不应该用于检查值的相等性(尽管它可以在某些情况下任意工作)
我正在尝试使用spring Cache实现对我的方法的缓存。问题是第一次执行后这个方法没有被执行,这意味着属性没有被加载。如果我删除@cacheable注释,它工作得很好。我的要求是,每当添加新属性时,这个方法才应该运行并加载属性,否则它应该从缓存返回。 XML文件:
问题内容: 我想将-object 保存到Android存储中的某个位置以快速检索并在其中显示数据。 这可能吗?如果可以,那么SQLite或外部存储适合哪种技术? 问题答案: 例。 并从活动中致电 不要忘记在清单文件中使用write_external_storage权限。
我使用的是完全修补过的Visual Studio 2013。我正在尝试使用JQuery、JQueryUI和JSRender。我也在尝试使用打字。在ts文件中,我得到如下错误: 类型“{}”上不存在属性“fade div”。
我试图在登录过程后获得连接的用户模型, 首先,在CanActivate guard检查了带有用户JSON对象的本地存储并发现该对象为空之后,用户将重定向到“/login”URL 然后用户登录并重定向回根URL“/”,在连接过程中我使用AuthService,它将从服务器返回的用户对象保存在用户模型中 这是我的守卫: