调用类方法时无法看到Python self.attribute

调用类方法时无法看到Python self.attribute,python,class,tkinter,namespaces,attributeerror,Python,Class,Tkinter,Namespaces,Attributeerror,我有一个与我正在创建的TKinter GUI相关的问题,但是这个问题不一定特定于这个库 背景 我目前正处于python自学课程的高级阶段。我正在学习的学习模块包括创建交互式GUI的TKinter。我正在制作一个游戏,其中随机生成的编号按钮必须在尽可能快的时间内连续点击 简介: 问题 在我的类game_grid下,我创建了一个实例变量;'self.holder',一个{Key:TkinterButtonObject}形式的25词条字典 在类方法中调用此实例变量时,出现以下错误: Attribu

我有一个与我正在创建的TKinter GUI相关的问题,但是这个问题不一定特定于这个库

背景

我目前正处于python自学课程的高级阶段。我正在学习的学习模块包括创建交互式GUI的TKinter。我正在制作一个游戏,其中随机生成的编号按钮必须在尽可能快的时间内连续点击

简介:

问题

  • 在我的类game_grid下,我创建了一个实例变量;'self.holder',一个{Key:TkinterButtonObject}形式的25词条字典

  • 在类方法中调用此实例变量时,出现以下错误:

AttributeError:“游戏网格”对象没有属性“持有者”

  • 我在类init下有一个print语句,证明该属性已成功创建。我已经确保我的间距和制表符都正常,并尝试了该变量的每个位置,包括用作类变量和全局变量,但都没有效果,因为它是一个半复杂的对象。我看不出会有什么不同,但任何想法都将不胜感激。我也知道这可以不用上课,但我正试图在我所有的课程中采用枯燥的原则和正交性
提前谢谢

完整代码:

将tkinter作为tk导入
从tkinter进口*
随机输入
从tkinter导入消息框
导入时间
win=tk.tk()
类游戏网格:
定义初始(自我,赢):
self.last_编号=0
self.number_按钮={}
self.row\u计数=0
self.column\u count=0
#生成25个随机数的列表
self.number_list=random.sample(范围(0999),25)
#将数字放入字典(数字:buttonobject)
self.holder={i:tk.Button(win,text=str(i),command=game\u grid.select\u Button(self,i))作为self.number\u列表中的i
#通过迭代行和列将每个对象打包到窗口中
对于自动钥匙夹:
self.holder[key].grid(列=self.column\u count,行=self.row\u count)
如果self.column_count<4:
self.column_count+=1
elif self.column_count==4:
self.column\u count=0
self.row_count+=1
打印(自持)
def选择按钮(自身,编号):
如果编号>自上次编号:
self.holder[number].config(状态=tk.DISABLED)
self.last_number=编号
其他:
通过
类stopclock():
定义初始化(自):
#停止时钟变量初始化
self.time\u begin=0
self.time_end=0
自运行时间=0
def启动(自):
如果self.time_begin==0:
self.time\u begin=time.time()
返回(“计时器已启动\n开始时间:”,self.time\u begin)
其他:
返回(“计时器已激活”)
def停止(自):
self.time_end=time.time()
self.time\u appeased=时间\u结束-时间\u开始
返回(“计时器完成\n结束时间:”,开始时间,“\n经过的时间:”,经过的时间)
play1=游戏网格(赢)
win.mainloop()
也许你的意思是:

command = self.select_button(self, i)
更新:

尽管来自研究:

应该是:

command = lambda i=i: self.select_button(i)

您可以在
支架
的听写理解中调用
选择按钮
<代码>选择_按钮,然后尝试使用
支架
,但尚未定义。您不想实际调用
选择按钮
,而是为按钮分配一个函数,如下所示:

self.holder = {i: tk.Button(window, text=str(i), command=lambda i=i: self.select_button(i)) for i in self.number_list}

AttributeError:“game_grid”对象没有属性“holder”:没错,在定义它之前,您尝试使用
self.holder
。非常感谢-如此简单的编辑现在可以完美地工作,我可以继续完善我的代码。我现在对代码的查看和执行有了更准确的了解,这无疑会再次派上用场。还有,我应该擦洗一下lambdas!
self.holder = {i: tk.Button(window, text=str(i), command=lambda i=i: self.select_button(i)) for i in self.number_list}