You need to enable JavaScript to run this app. Python类内调用check方法报NameError未定义(LeetCode整数转罗马数字)
优惠活动
大模型
产品
解决方案
定价
更多

Python类内调用check方法报NameError未定义(LeetCode整数转罗马数字)

报错根因

你的代码触发NameError: name 'check' is not defined源于两个Python语法层面的问题:

  • 类的定义块不属于类内部方法的嵌套作用域,在方法内部直接用裸名引用类内定义的变量、函数时,Python不会自动从类的命名空间查找,会按照LEGB规则从本地、上层嵌套函数、全局、内置作用域依次搜索,找不到就触发报错。
  • 类内部通过def定义的实例方法,必须将第一个参数设为self(代表当前类实例),否则调用时会出现参数个数不匹配的问题。
修正步骤
  • 给check方法补上第一个参数self,将方法内部所有对类属性a的引用替换为self.a,所有递归调用check的位置替换为self.check,确保能正确定位类内的方法和属性。
  • 在intToRoman方法中调用check时,同样通过self.check显式指定调用类内的实例方法,不要直接使用裸名check。
修正后可正常运行的代码
class Solution:
    a={1:'I',2:'II',3:'III',4:'IV',5:'V',6:'VI',7:'VII',8:'VIII',9:'IX'}
    
    def check(self, num, s):
        if num<=0:
            return s
        elif num<10:
            return self.check(0,s+self.a[num])
        elif 10 <= num < 50:
            if num<=30:
                return self.check(num%10,s+('X'*(num//10)))
            else:
                return self.check(num%10,s+'XL')
        elif 50 <= num <100:
            if num<=80:
                return self.check(num%10,s+('L'+'X'*(num//10)))
            else:
                return self.check(num%10,s+'XC')  
        elif 100 <= num <500:
            if num<=300:
                return self.check(num%100,s+('C'*(num//100)))
            else:
                return self.check(num%100,s+'CD')      
        elif 500 <= num <1000:
            if num<=800:
                return self.check(num%100,s+('D'+'C'*(num//100)))
            else:
                return self.check(num%100,s+'CM')  
        else:
            return self.check(num%1000,s+'M'*(num//1000))
        
    def intToRoman(self, num: int) -> str:
        return self.check(num, "")
补充说明

如果不想使用实例方法的写法,也可以选择两种替代实现:

  • 给check加上@staticmethod装饰器将其定义为静态方法,此时不需要加self参数,但方法内引用属性、调用方法时需要显式指定类名(比如Solution.a、Solution.check),这种写法不如实例方法适配编程题的运行环境友好。
  • 直接将check和a字典移到全局作用域下作为全局变量、全局函数,此时不需要加类前缀也能正常访问,但会污染全局命名空间,不如类内封装的写法规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 03:06:07