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

Grid类方法调用gridArray变量触发NameError问题求助

问题排查与修复方案

我来帮你搞定这个NameError问题,你的代码里有几个关键的小疏漏,咱们一步步理清楚:

1. 构造方法的名字写错了

Python类的构造方法必须是__init__(前后各两个下划线),你写的是_init_(前后各一个下划线)——这意味着这个方法根本不会被Python当作构造方法执行,里面的变量自然也不会被初始化。

2. 没有用self绑定实例属性

就算构造方法写对了,你直接写gridArray = 5只是在构造方法的局部作用域里创建了临时变量,并没有把它变成Grid实例的属性。必须用self.前缀来绑定,比如self.gridArray = 5,这样这个变量才属于每个Grid实例。

3. 实例方法缺少self参数

selectCell是类的实例方法,第一个参数必须是self(这是Python的约定,用来指代当前实例对象)。没有self的话,方法不仅无法访问实例的属性,调用时还会因为参数不匹配报错。


修复后的完整代码

class Grid:
    def __init__(self):
        self.gridArray = 5  # [[cell.Cell() for j in range(9)] for i in range(9)]
        self.selected = (-1, -1)
    
    def selectCell(self, x):
        self.selected = (int(x[0]/const.CELLSIZE), int(x[1]/const.CELLSIZE))
        print(self.selected)
        print(self.gridArray)

修复后的效果说明

现在当你创建Grid实例并调用selectCell方法时:

  • 构造方法__init__会正确执行,给实例绑定gridArray和selected属性
  • selectCell通过self可以访问到实例的gridArray,执行print(self.gridArray)会输出预期的5
  • 同时selected也改成了实例属性,后续其他方法也能正常访问它

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:47:41