我有一个代表系统的状态对象.状态对象中的属性从[huge]文本文件中填充.因为每次创建状态实例时都不会访问每个属性,所以延迟加载它们是有意义的:
class State:
def import_positions(self):
self._positions = {}
# Code which populates self._positions
@property
def positions(self):
try:
return self._positions
except AttributeError:
self.import_positions()
return self._positions
def import_forces(self):
self._forces = {}
# Code which populates self._forces
@property
def forces(self):
try:
return self._forces
except AttributeError:
self.import_forces()
return self._forces
Run Code Online (Sandbox Code Playgroud)
这里有很多重复的样板代码.此外,有时import_abc可以填充一些变量(即,如果已经打开,则从一个小数据文件中导入一些变量).
重载@property是有意义的,它接受一个"提供"该变量的函数,即:
class State:
def import_positions(self):
self._positions = {}
# Code which populates self._positions
@lazyproperty(import_positions)
def positions(self):
pass
def import_forces(self):
self._forces = {}
# Code which populates self._forces and self._strain
@lazyproperty(import_forces)
def forces(self):
pass
@lazyproperty(import_forces) …Run Code Online (Sandbox Code Playgroud)