You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python OOP中调用另外两个类的属性至PCM类计算snr_tot?

修正后的Python面向对象代码及说明

问题分析

原代码存在以下关键问题:

  • PCM类的方法缺少self参数,无法访问实例属性
  • 方法中直接使用未定义的class_a、class_b变量
  • ADC类的m属性未引用self.n_bit,会触发变量未定义错误
  • 继承与实例传参的设计混乱,导致属性访问逻辑冲突

修正后的代码

import numpy as np

# 补充lin2db函数示例实现(原代码未提供,实际使用需匹配需求)
def lin2db(val):
    return 10 * np.log10(val)

class ADC():
    n_bit = np.array([2, 3, 4, 6, 8, 10, 12, 14, 16], dtype=np.int64)
    
    @property
    def snr(self):
        M = 2 ** self.n_bit
        snr_lin = M ** 2
        return snr_lin

    @property
    def snr_db(self):
        snr_lin = self.snr
        snr_db = lin2db(snr_lin)
        return snr_db

    @property
    def m(self):
        return 2 ** self.n_bit

class BSC():
    fs_step = 2.75625e3
    error_probability = np.arange(1e-12, fs_step, 1)
    n_bit = np.array([2, 3, 4, 6, 8, 10, 12, 14, 16], dtype=np.int64)
    
    @property
    def snr_BSC(self):
        snr_lin_BSC = 1 / (4 * self.error_probability)
        return snr_lin_BSC

    @property
    def snr_db(self):
        snr_lin_BSC = self.snr_BSC
        snr_db = lin2db(snr_lin_BSC)
        return snr_db

class PCM():
    def __init__(self, adc_instance, bsc_instance):
        self.analog_bandwidth = 0
        self.adc = adc_instance  # 保存ADC实例引用
        self.bsc = bsc_instance  # 保存BSC实例引用

    @property
    def snr_tot(self):
        # 通过实例引用访问对应属性
        return (1 / self.adc.snr + 1 / self.bsc.snr_BSC) ** (-1)

    def critical_pe(self):
        return 1 / (4 * (self.adc.m ** 2 - 1))

# 测试并打印结果
if __name__ == "__main__":
    adc = ADC()
    bsc = BSC()
    pcm = PCM(adc, bsc)
    print("总SNR(线性值):", pcm.snr_tot)

核心修改说明

  • 给PCM类的所有方法添加self参数,通过self访问实例内部的ADC/BSC对象
  • 将PCM改为组合模式(而非多重继承),更符合逻辑:PCM依赖ADC和BSC的功能,而非继承它们的属性
  • 修复ADC类m属性的self引用问题
  • 将snr_TOT改为属性(@property),调用方式更直观
  • 添加完整测试代码,实现打印snr_tot的功能
  • 补充lin2db函数的基础实现(原代码未提供,需根据实际需求调整)

内容的提问来源于stack exchange,提问作者Severjan Lici

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:32:07