Python类内调用方法报name 'isPalindrome'未定义错误如何解决?
问题原因分析
- 核心报错原因:
isPalindrome是Solution类的实例方法,在另一个实例方法longestPalindrome中直接调用isPalindrome()时,Python会在全局作用域查找对应函数,无法识别到类内部的方法,正确调用方式为self.isPalindrome()。 - 其他隐藏语法/逻辑问题:
- Python类的实例方法第一个参数必须是指向实例本身的
self,你当前isPalindrome的定义缺少self参数,后续调用会报错。 - Python的布尔常量是首字母大写的
True和False,你代码中写的false、true属于未定义变量,运行时会触发新的报错。 - Python3中
/运算符返回浮点数,而range()要求传入整数参数,需要替换为整数除法运算符//。 - 回文判断的下标逻辑存在越界问题:
s[len(s)-i]当i=0时会取到s[len(s)],超出字符串下标范围,需要修改为len(s)-1 -i。 - 类内部直接写
ans = isPalindrome("dad")属于类属性初始化逻辑,编辑器不会报未定义错误是因为在类的命名空间内可以找到该方法名,但实际运行时会因为方法未绑定实例报错,不建议在类定义内部直接调用实例方法。
- Python类的实例方法第一个参数必须是指向实例本身的
修正后代码示例
class Solution: def isPalindrome(self, s: str) -> bool: n = len(s) if n == 0: return True # 统一奇偶长度逻辑,不需要分开判断 for i in range(n // 2): if s[i] != s[n - 1 - i]: return False return True def longestPalindrome(self, s: str) -> str: longestString = "" n = len(s) for i in range(n): # j从i+1开始,跳过无意义的空字符串判断 for j in range(i + 1, n + 1): current = s[i:j] if self.isPalindrome(current): if len(current) > len(longestString): longestString = current return longestString # 测试代码在类外部执行 if __name__ == "__main__": sol = Solution() print(sol.isPalindrome("dad")) print(sol.longestPalindrome("babad"))
内容的提问来源于stack exchange,提问作者aberns
相关产品推荐
相关产品推荐

