我很难理解这个错误。
在下面的代码中,当我使用tk.Frame时,一切都按预期工作。但是,如果我使用super(),就会引发一个AttributeError ('Application没有属性tk')。
class Application(tk.Frame):
def __init__(self,parent):
tk.Frame.__init__(self,parent) <----- This works
# super().__init__(self,parent) <------ This line throws an error
.
.
.
if __name__=='main':
root=tk.Tk()
Application(root).pack()
root.mainloop()我的理解是,super(Application,self).__init__()将调用绑定到类的__init__方法,该方法在实例的MRO中紧跟在child之后,即在我的情况下的类tkinter.Frame。
我通过打印出Application.__mro__和检查来验证这一点。
所以我的问题是,如果super().__init__(self,parent)和tk.Frame.__init__(self,parent)都是指类tkinter.Frame的相同的__init__方法,为什么其中一个抛出错误而另一个运行良好?我怀疑我在super()的工作方式上有一些误解。
发布于 2019-07-02 04:56:55
Python3 super不需要将self作为参数传递。
下面的示例说明了调用super来初始化小部件的父类的正确方法:
import tkinter as tk
class Application(tk.Frame):
def __init__(self, parent):
super().__init__(parent)
tk.Button(self, text='Super!', command=root.destroy).pack()
root = tk.Tk()
Application(root).pack()
root.mainloop()原因是python核心开发人员决定简化super的使用,并将self的传递抽象为驱动python的底层代码。
https://stackoverflow.com/questions/56845491
复制相似问题