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

Python类中__init__函数内定义的变量无法在其他类方法中调用问题

问题根源

你遇到的报错本质是实例属性作用域和类内方法调用规则两个问题导致的,具体错误点如下:

  • 你在__init__构造方法中定义的hop_length、frame_length、final_sample、full_rms、rms_selection等变量都是构造方法的局部变量,仅在__init__运行期间有效,不会被保存到类实例中,其他类方法自然无法访问
  • 类内调用其他实例方法需要加self.前缀,你在get_min_energy_sample里直接写find_nearest()会被识别为全局函数,找不到就会报错
  • get_min_energy_sample方法定义时多余传入了track和sr参数,这两个值已经保存在实例属性里,不需要重复传参,否则你调用时不传参也会触发参数不匹配报错

修正后代码

import librosa
import numpy as np

class AudioFeatures(object):
    def __init__(self, track, sr):
        self.track = track
        self.sr = sr       
        self.hop_length = 2048
        frame_length_in_seconds = 10        
        self.frame_length = sr * frame_length_in_seconds
        self.final_sample = int(librosa.get_duration(track) * sr)
        self.full_rms = librosa.feature.rms(track, frame_length=self.frame_length, hop_length=self.hop_length, center=True)
        std_rms = np.std(self.full_rms)
        self.rms_selection = std_rms + (std_rms - (std_rms * (1 - std_rms)))

    def find_nearest(self, array, value):
        idx = (np.abs(array - value)).argmin()
        return idx

    def get_min_energy_sample(self):
        min_value = np.mean(self.full_rms) - self.rms_selection
        min_value_loc = self.find_nearest(self.full_rms, min_value)
        min_energy_frame_start = librosa.frames_to_samples(min_value_loc, hop_length=self.hop_length)
        min_energy_frame_end = min_energy_frame_start + self.frame_length

        # 校验帧长度,不足10秒则取最后10秒
        if min_energy_frame_end > self.final_sample:
            min_energy_sample = self.track[(self.final_sample - self.frame_length): self.final_sample]
        else:
            min_energy_sample = self.track[min_energy_frame_start: min_energy_frame_end]

        return min_energy_sample

temp_track = AudioFeatures(file_loc, sr) 
res = temp_track.get_min_energy_sample()

内容的提问来源于stack exchange,提问作者Colton Dewberry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:48:03