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 方法中使用它与您的第一个参数将是对该对象的引用这一事实无关。

  1. 您混淆了两件事:self 在构造函数(__init__ 方法)被 调用时隐含 。 (这同样适用于所有其他实例方法。)这意味着,您不必(实际上:您不能)在创建实例时传递它,只需编写:my_app = MathematicalQuizApp()(不传递参数 self).

  2. 在构造函数(以及任何实例方法)的定义中,第一个参数隐式地作为实例本身,故名。如果你错过了在任何实例方法中添加代表实例的参数,Python 将把你在方法定义中的第一个参数作为实例。这很可能会导致异常。

  3. 您可以为参数 self 使用任何其他变量名。 self 这个名字只是约定俗成的。 (但没有理由不使用它,并且有很多理由坚持惯例。)