【发布时间】:2021-11-20 00:32:55
【问题描述】:
我想要一个仅用于访问只读数据的类。如果从类请求数据但尚不存在,我希望类处理获取数据。我只是想知道以下代码是否有意义;你能看出这有什么潜在的问题吗?
class Data:
@property
def some_data(self):
if hasattr(Data, "_some_data"):
return Data._some_data
else:
Data._some_data = function_that_gets_data()
return Data._some_data
# other definitions for more data go here ...
D = Data()
# access data
print(D.some_data)
【问题讨论】:
-
您可以使用属性进行延迟初始化。您使用实例的属性来初始化并获取类属性有点奇怪。
-
你是想问如何让一个类属性成为一个属性?有关最新答案,请参阅 stackoverflow.com/a/64738850/3001761。
-
您希望缓存数据的范围是实例还是类?
-
你是什么意思@khelwood?你是指我如何使用例如
Data._some_data在课堂上,而不是self._some_data? -
那么你也可以使用
functools.cached_property。
标签: python properties