Python 基于另一个特性自动设置特性的值,并将其缓存以供以后使用
我已经定义了一个类,它返回一些参数,如下所示Python 基于另一个特性自动设置特性的值,并将其缓存以供以后使用,python,properties,Python,Properties,我已经定义了一个类,它返回一些参数,如下所示 class PHYParams: def __init__(self, bandwidth): #Static self.n_symbols = 7 self.nrb_sc = 12 # Properties self.bw = bandwidth @property def bw(self):
class PHYParams:
def __init__(self, bandwidth):
#Static
self.n_symbols = 7
self.nrb_sc = 12
# Properties
self.bw = bandwidth
@property
def bw(self):
return self._bw
@bw.setter
def bw(self, value):
if value in [10, 20]:
self._bw = value
else:
print('Invalid Bandwidth value. Taking default of 10 MHz')
self._bw = 10
@property
def NSLRB(self):
return self.bw * 5
@property
def NFFT(self):
return int(self.bw * 102.4)
属性
NSLRB
和NFFT
将在以后大量使用。然而,根据这个实现,每次我调用其中一个函数时,它都会调用get属性,这涉及到重新计算。我试图避免将它们放在\uuu init\uu
中,因为如果我稍后更改bw
属性,它将不会刷新其值。是否有一种缓存它们的方法,这样它们就不会每次都计算,而只会在bw
属性更改时计算,并将它们存储为一个属性,这样我就可以像变量一样调用它们了?只需在bw
setter中设置这两个属性,不要使它们成为property
对象:
class PHYParams:
def __init__(self, bandwidth):
#Static
self.n_symbols = 7
self.nrb_sc = 12
# Properties
self.bw = bandwidth
@property
def bw(self):
return self._bw
@bw.setter
def bw(self, value):
if value in [10, 20]:
self._bw = value
else:
print('Invalid Bandwidth value. Taking default of 10 MHz')
self._bw = 10
self.NSLRB = self._bw * 5
self.NFFT = int(self._bw * 102.4)
不要求属性只接触“它们自己的”属性状态
顺便说一句:如果有人设置了错误的bandwith值,不要使用print()
来传达这一点。使用just override并将带宽设置为10并输出a,或者引发异常,以便开发人员通过传递错误的值来更正其代码:
@bw.setter
def bw(self, value):
if value not in {10, 20}:
value = 10
warning.warn('Invalid Bandwidth value. Taking default of 10 MHz', RuntimeWarning)
self._bw = value
self.NSLRB = self._bw * 5
self.NFFT = int(self._bw * 102.4)
或
只需在
bw
setter中设置这两个属性,不要使它们成为property
对象:
class PHYParams:
def __init__(self, bandwidth):
#Static
self.n_symbols = 7
self.nrb_sc = 12
# Properties
self.bw = bandwidth
@property
def bw(self):
return self._bw
@bw.setter
def bw(self, value):
if value in [10, 20]:
self._bw = value
else:
print('Invalid Bandwidth value. Taking default of 10 MHz')
self._bw = 10
self.NSLRB = self._bw * 5
self.NFFT = int(self._bw * 102.4)
不要求属性只接触“它们自己的”属性状态
顺便说一句:如果有人设置了错误的bandwith值,不要使用print()
来传达这一点。使用just override并将带宽设置为10并输出a,或者引发异常,以便开发人员通过传递错误的值来更正其代码:
@bw.setter
def bw(self, value):
if value not in {10, 20}:
value = 10
warning.warn('Invalid Bandwidth value. Taking default of 10 MHz', RuntimeWarning)
self._bw = value
self.NSLRB = self._bw * 5
self.NFFT = int(self._bw * 102.4)
或
天啊!我怎么会错过呢?谢谢,谢谢你的警告提示。我曾想过使用
提升值错误
,但警告似乎是更好的选择!我怎么会错过呢?谢谢,谢谢你的警告提示。我曾想过使用提升值错误
,但警告似乎更合适