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
相关产品推荐
相关产品推荐

