调用类方法get_sorted_run_length时出现NameError的问题排查
解决类方法调用的NameError问题
根本原因
在Python类的实例方法中,调用同类的其他实例方法必须通过self前缀,否则解释器会将其视为全局函数,找不到对应名称时就会抛出NameError。结合你的代码,以下是具体错误点和修复方案:
错误1:未使用self调用类方法
在natural_merge_sort方法中,直接调用get_sorted_run_length,没有通过实例对象self访问。
原代码:
get_sorted_run_length(integer_list, 0)
修复后:
self.get_sorted_run_length(integer_list, 0)
错误2:参数顺序颠倒+变量拼写错误
该行代码存在三重问题:没有用self前缀、参数顺序错误、变量名拼写错误(integer_lsit应为integer_list)。
原代码:
index = get_sorted_run_length(self,integer_lsit,index)
修复后:
index = self.get_sorted_run_length(integer_list, index)
错误3:调用merge方法的问题
原代码中merge()同样未使用self前缀,且merge方法需要传入4个参数,需补充参数并通过self调用。
示例修复(需根据你的排序逻辑补充正确参数):
self.merge(integer_list, left_first, left_last, right_last)
额外问题:类内方法缩进错误
原代码中类的方法没有正确缩进,Python会将其视为类外的独立函数,这也是潜在语法错误。所有类内方法需缩进(通常4个空格),示例:
class NaturalMergeSorter: def __init__(self): return def get_sorted_run_length(self, integer_list, start_index): # 方法内容... def natural_merge_sort(self, integer_list): # 修复后的方法内容... def merge(self, numbers, left_first, left_last, right_last): # 方法内容...
修复后的natural_merge_sort方法示例
def natural_merge_sort(self, integer_list): self.get_sorted_run_length(integer_list, 0) index = 0 index = self.get_sorted_run_length(integer_list, index) if index == len(integer_list): return integer_list # 注意:这里的i=0永远不会执行,因为前面已经return,需根据逻辑调整 else: self.get_sorted_run_length(integer_list, index) # 补充merge所需的正确参数,例如: # self.merge(integer_list, 0, index-1, len(integer_list)-1) return integer_list # 根据排序逻辑决定是否保留该行
内容的提问来源于stack exchange,提问作者Armenta
相关产品推荐
相关产品推荐

