我正在尝试制作具有多个框架的tkinter GUI,并且在创建类时我要包含__init__ method
。
我必须将self
传递给它还是隐含?
我正在看tkinter(https://www.youtube.com/watch?v=A0gaXfM1UN0&list=PLQVvvaa0QuDclKx-QpC9wntnURXVJqLyk&index=2)的教程。
他提到self
是隐含的,您不必使用它,但是我的老师告诉我们,您始终需要包括自我。
它在没有自我的情况下仍然可以工作还是需要吗?
此外,他说可以根据需要命名,但我从未见过有人使用其他名称。
class MathematicalQuizApp(tk.Tk):
def __init__(self, *args, *kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side="top", fill="both", expand = True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
##other code after to make it work that also uses self
您必须在__init__
方法中传递self还是暗含它,这意味着您不必包含它?
如果可能的话,不包括它的实际意义是什么?
没有看过视频链接,但是我怀疑该视频所隐含的“自我,您不必使用它”的意思是,您不需要使用 init块,但它暗示将init will be作为第一个参数传递给init。
[本质上,无论您想如何阅读视频,您的老师都是正确的。 类中的方法将在第一个参数中获得对对象的引用,(通常将其命名为self,但您甚至可以将名称更改为任何名称。self不是特殊的关键字)。
是否在初始化方法中使用,与您的第一个参数将成为对该对象的引用这一事实无关。
您正在混淆两件事:当构造函数(self
方法)为被调用时,隐含__init__
。 (对于其他所有istance方法也是如此。)这意味着,您在创建实例时不必(实际上:您不能)传递它,只需编写:my_app = MathematicalQuizApp()
(而无需传递参数self
)。
在构造函数(以及任何instace方法的definition中),第一个参数隐式地用作实例itself,因此是名称。如果您错过了在任何实例方法中添加代表实例的参数的权限,Python会将方法定义中的第一个参数作为实例。这很可能导致异常。
您可以为参数self
使用任何其他变量名称。名称self
只是常规名称。 (但是没有理由不使用它,并且有很多理由要遵守约定。)