为何无法调用Python类中的Loss方法?OOP新手求助
问题分析与修正
为什么调制方式对象(BPSK/QPSK等)能正常工作?
你定义的BPSK、QPSK这些是Line类的类属性,它们属于Line这个类本身,不需要创建Line的实例就能直接通过Line.BPSK访问,所以这部分代码能正常运行。
Loss方法失效的核心问题
你的Loss方法存在三个关键错误:
- 多余的参数:方法定义了
loss参数,但内部完全没用到,属于无效参数。 - 未通过self访问实例属性:直接使用
loss_coefficient和length会导致Python找不到这些变量——这两个是Line实例的属性,必须通过self.loss_coefficient、self.length来访问。 - 无返回值且未主动输出:方法只是给实例添加了
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: def __init__(self, loss_coefficient: float, length: int): self.loss_coefficient = loss_coefficient self.length = length def calculate_loss(self): # 正确访问实例属性计算损耗 self.loss = self.loss_coefficient * self.length # 返回计算结果,方便直接获取 return self.loss # 类属性,无需实例化即可访问 BPSK = Digital_signal_information(0.001, 0, 1) QPSK = Digital_signal_information(0.001, 0, 2) Eight_QAM = Digital_signal_information(0.001, 0, 3) Sixteen_QAM = Digital_signal_information(0.001, 0, 4)
正确调用方式
a = Line(1.0, 2) # 调用方法获取损耗值并打印 print(a.calculate_loss()) # 或者调用方法后,直接访问实例上的loss属性 print(a.loss)
关键知识点总结
- 类属性:属于类本身,所有实例共享,无需创建实例就能访问(比如你定义的四个调制方式对象)。
- 实例方法:必须通过类的实例调用,方法内部访问实例属性必须加
self.前缀;如果需要看到执行结果,要么让方法返回值,要么在调用后访问实例属性/打印结果。
内容的提问来源于stack exchange,提问作者Severjan Lici
相关产品推荐
相关产品推荐

