【发布时间】:2021-04-07 09:30:56
【问题描述】:
我有一个班级持有一些科学数据。根据内部状态,此类的值可以显示为规范化(即无单位)或非规范化。这些值始终按规范化存储,但如果对象设置为非规范化状态,用户可访问的属性(和方法)将给出非规范化值。这样类就显示为非规范化,而无需复制存储的值。
现在我使用 getter 实现了这一点。虽然它有效,但它提供了很多重复结构,我想知道是否有一种更 Pythonic 的方式来管理它而不会使事情过于复杂。
我这样做对吗?有没有更优雅的方式以相似的方式在两组数据之间切换?
class CoolPhysicsData(object):
def __init__(self, lambda0, *args, normed=False):
self.lambda0 = lambda0 # some normalization factor (wavelength of some wave)
self.normalized = normed # user can change this state as he pleases
self._normed_tmin, self._normed_tmax, self._normed_r = self.calculate_stuffs(*args)
...
@property
def tmin(self):
if self.normalized:
return self._normed_tmin
else:
return denormalize(self.lambda0, self._normed_tmin, unit_type="time")
@property
def tmax(self):
if self.normalized:
return self._normed_tmax
else:
return denormalize(self.lambda0, self._normed_tmax, unit_type="time")
@property
def r(self):
if self.normalized:
return self._normed_r
else:
return denormalize(self.lambda0, self._normed_r, unit_type="len")
... # about 15 getters alike these
【问题讨论】:
标签: python-3.x class properties state getter