Просто установите эти два атрибута в установщике bw
, не делайте их 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)
Не требуется, чтобы свойства касались только «своего» состояния атрибута.
В качестве отступления: если кто-то устанавливает неправильное значение полосы пропускания, не используйте print()
для передачи этого. Либо просто переопределите и установите полосу пропускания 10, и выведите предупреждение с warnings.warn()
, либо создайте исключение, чтобы разработчик, передавший неправильное значение, мог исправить свой код:
@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
def bw(self, value):
if value not in {10, 20}:
raise ValueError('Invalid Bandwidth value, only 10 or 20 allowed', value)
self._bw = value
self.NSLRB = self._bw * 5
self.NFFT = int(self._bw * 102.4)