self 是 __init__ 和其他 methods/functions 的要求吗?
Is self a requirement in __init__ and other methods/functions?
我正在尝试制作一个具有多个框架的 tkinter GUI,并且在创建 class 时我包含了 __init__ method
。
我必须将 self
传递给它还是暗示?
我正在观看 tkinter 教程 (https://www.youtube.com/watch?v=A0gaXfM1UN0&list=PLQVvvaa0QuDclKx-QpC9wntnURXVJqLyk&index=2)。
他提到 self
是隐含的,你不必使用它,但是我的老师教我们你总是需要包括自己。
如果没有 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 还是隐含的,这意味着您不必包含它?
如果可能,不包括它的实际意义是什么?
没看过视频 link,但我怀疑视频 "self is implied and that you don't have to use it" 的意思是你不需要 使用 self 在 init 块中,但暗示 init 将 作为第一个参数传递给 init。
从本质上讲,不管你想怎么读视频,你的老师都是对的。 class 中的方法将获得对第一个参数 中对象的引用(通常命名为 self,但您甚至可以将名称更改为任何名称。self 不是特殊关键字).
您是否在 init 方法中使用它与您的第一个参数将是对该对象的引用这一事实无关。
您混淆了两件事:self
在构造函数(__init__
方法)被 调用时隐含 。 (这同样适用于所有其他实例方法。)这意味着,您不必(实际上:您不能)在创建实例时传递它,只需编写:my_app = MathematicalQuizApp()
(不传递参数 self
).
在构造函数(以及任何实例方法)的定义中,第一个参数隐式地作为实例本身,故名。如果你错过了在任何实例方法中添加代表实例的参数,Python 将把你在方法定义中的第一个参数作为实例。这很可能会导致异常。
您可以为参数 self
使用任何其他变量名。 self
这个名字只是约定俗成的。 (但没有理由不使用它,并且有很多理由坚持惯例。)
我正在尝试制作一个具有多个框架的 tkinter GUI,并且在创建 class 时我包含了 __init__ method
。
我必须将 self
传递给它还是暗示?
我正在观看 tkinter 教程 (https://www.youtube.com/watch?v=A0gaXfM1UN0&list=PLQVvvaa0QuDclKx-QpC9wntnURXVJqLyk&index=2)。
他提到 self
是隐含的,你不必使用它,但是我的老师教我们你总是需要包括自己。
如果没有 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 还是隐含的,这意味着您不必包含它?
如果可能,不包括它的实际意义是什么?
没看过视频 link,但我怀疑视频 "self is implied and that you don't have to use it" 的意思是你不需要 使用 self 在 init 块中,但暗示 init 将 作为第一个参数传递给 init。
从本质上讲,不管你想怎么读视频,你的老师都是对的。 class 中的方法将获得对第一个参数 中对象的引用(通常命名为 self,但您甚至可以将名称更改为任何名称。self 不是特殊关键字).
您是否在 init 方法中使用它与您的第一个参数将是对该对象的引用这一事实无关。
您混淆了两件事:
self
在构造函数(__init__
方法)被 调用时隐含 。 (这同样适用于所有其他实例方法。)这意味着,您不必(实际上:您不能)在创建实例时传递它,只需编写:my_app = MathematicalQuizApp()
(不传递参数self
).在构造函数(以及任何实例方法)的定义中,第一个参数隐式地作为实例本身,故名。如果你错过了在任何实例方法中添加代表实例的参数,Python 将把你在方法定义中的第一个参数作为实例。这很可能会导致异常。
您可以为参数
self
使用任何其他变量名。self
这个名字只是约定俗成的。 (但没有理由不使用它,并且有很多理由坚持惯例。)