我无法理解这个错误。
在下面的代码中,当我使用tk.Frame
一切都按预期进行。但是如果我使用super()
,我被抛出了AttributeError
('应用程序对象没有属性 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__
绑定到类的方法,后跟child
在实例的 MRO 中,即类tkinter.Frame
在我的情况下。
我通过打印出来验证了这一点Application.__mro__
并检查。
所以我的问题是如果两者都super().__init__(self,parent)
and tk.Frame.__init__(self,parent)
指的是同一个__init__
类的方法tkinter.Frame
,为什么一个抛出错误而另一个工作正常?我怀疑我对 super() 的工作方式有一些误解。
蟒蛇3super
不需要通过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/10482953/python-extending-with-using-super-python-3-vs-python-2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)