Python中如何让子类调用父类的signal_power属性?
解决Line类调用父类signal_power属性的问题
你的问题出在Line类的构造函数没有调用父类Digital_signal_information的构造函数,导致父类的signal_power、noise_power等属性从未被初始化,自然无法在子类方法中访问。
解决方案:在子类构造函数中调用父类构造函数
修改Line类的__init__方法,让它接收父类所需的参数,并通过super()调用父类的构造函数,完成父类属性的初始化。同时注意修正SNR_Digital方法中未定义的self.loss问题(假设损耗是损耗系数乘以长度,你可根据实际逻辑调整):
class Digital_signal_information: def __init__(self, signal_power: float, noise_power: float, n_bit_mod: int): self.signal_power = signal_power # 要使用的属性 self.noise_power = noise_power self.n_bit_mod = n_bit_mod class Line(Digital_signal_information): # 新增父类所需的参数 def __init__(self, loss_coefficient: float, length: int, signal_power: float, noise_power: float, n_bit_mod: int): # 调用父类构造函数,初始化signal_power等属性 super().__init__(signal_power, noise_power, n_bit_mod) self.loss_coefficient = loss_coefficient self.length = length def Noise_Generation(self): noise_generation = 1e-9 * self.signal_power * self.length return noise_generation def SNR_Digital(self): # 计算线路损耗(根据你的逻辑调整) loss = self.loss_coefficient * self.length snr_digital = self.signal_power - self.noise_power - loss return snr_digital
原理说明
super().__init__(...)会触发父类的构造函数,将传入的signal_power等参数赋值给子类实例的对应属性,这样你就能在Noise_Generation和SNR_Digital方法中通过self.signal_power正常访问该属性了。
内容的提问来源于stack exchange,提问作者Severjan Lici
相关产品推荐
相关产品推荐

