Python子类调用父类方法触发NameError报错求助
解决NameError: name 'userTurn' is not defined的问题
这个错误的根源很清晰:你在lambda表达式里直接调用userTurn,但这个方法是父类playGame的实例方法,必须通过当前类的实例(也就是self)来访问,不能直接用方法名调用。
你的GUI类继承了playGame,当前实例self拥有父类的所有方法,所以只需要把lambda里的userTurn改成self.userTurn就能解决问题。
修正后的代码如下:
class GUI(playGame): def __init__(self): import tkinter as tk home=tk.Tk() home.title("Tic Tac Toe") home.geometry("160x180") w,h=6,3 # 这里将userTurn改为self.userTurn,绑定当前实例 self.c1r1=tk.Button(text='',width=w, height=h, command=lambda: self.userTurn(self.c1r1)) self.c1r1.grid(column=1,row=1) home.mainloop()
再补充个小解释:
- 实例方法的调用必须依附于类的实例,
self就是当前GUI类的实例,通过它可以访问到继承自playGame的userTurn方法。 - 你之前的写法相当于在全局作用域查找
userTurn函数,但这个方法只存在于playGame的实例中,所以才会抛出NameError。
内容的提问来源于stack exchange,提问作者Husun
相关产品推荐
相关产品推荐

