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

Python类中calculate方法调用search报未解析引用错误如何解决

问题修复方案

报错核心原因

  • 类方法缩进错误:add_data、search、calculate三个方法被错误缩进在了__init__方法内部,属于__init__的局部函数,类的其他位置无法访问,这是触发unresolved reference error的主要原因
  • 实例方法调用规则错误:Python类内部调用自身的实例方法时,必须通过实例对象self调用,不能直接写方法名
  • 隐藏逻辑问题:search方法中使用的map是实例属性,需要加self.前缀,否则运行时也会报未定义错误;原代码中search传入的dict参数未被使用,类内可以直接访问self.dict,属于冗余参数

修复后完整代码

class round_robin:
    def __init__(self):
        self.arrive=0
        self.burst=0
        self.running=[]
        self.ready=[]
        self.dict={}
        self.map={}
        self.timestamp=2

    # 调整缩进和__init__平级,成为类的实例方法
    def add_data(self,process,arrival,dep):
        self.dict[process]=[arrival,dep]

    # 调整缩进和__init__平级,移除冗余的dict参数
    def search(self, cnt):
        for key, value in sorted(self.dict.items()):
            if cnt >= value[0] and value[0] > 0:
                value[1] -= cnt
                if (value[1] > 0):
                    self.ready.append(key)
                    # 实例属性map需要加self.前缀访问
                    if key in self.map:
                        self.map[key] += cnt
                    else:
                        self.map[key] = cnt
                    break
                else:
                    break

    # 调整缩进和__init__平级
    def calculate(self):
        cnt=0
        for key,value in sorted(self.dict.items()):
            if(len(self.ready)==0):
                # 调用实例方法必须加self.前缀
                self.search(cnt)
            else:
                self.search(cnt)

补充说明

Python原生支持类内部的函数调用,只需要遵守实例方法的调用规则即可:类的普通实例方法第一个参数固定为self代表实例本身,所有实例属性、实例方法的访问都需要通过self完成。

内容的提问来源于stack exchange,提问作者Deco Pinkman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:15:01