__init__和其他方法/功能本身是一个要求吗?

问题描述 投票:1回答:2

我正在尝试制作具有多个框架的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还是暗含它,这意味着您不必包含它?

如果可能的话,不包括它的实际意义是什么?

python tkinter self
2个回答
0
投票

没有看过视频链接,但是我怀疑该视频所隐含的“自我,您不必使用它”的意思是,您不需要使用 init块,但它暗示将init will be作为第一个参数传递给init。

[本质上,无论您想如何阅读视频,您的老师都是正确的。 类中的方法将在第一个参数中获得对对象的引用,(通常将其命名为self,但您甚至可以将名称更改为任何名称。self不是特殊的关键字)。

是否在初始化方法中使用,与您的第一个参数将成为对该对象的引用这一事实无关。


0
投票
  1. 您正在混淆两件事:当构造函数(self方法)为被调用时,隐含__init__。 (对于其他所有istance方法也是如此。)这意味着,您在创建实例时不必(实际上:您不能)传递它,只需编写:my_app = MathematicalQuizApp()(而无需传递参数self )。

  2. 在构造函数(以及任何instace方法的definition中),第一个参数隐式地用作实例itself,因此是名称。如果您错过了在任何实例方法中添加代表实例的参数的权限,Python会将方法定义中的第一个参数作为实例。这很可能导致异常。

  3. 您可以为参数self使用任何其他变量名称。名称self只是常规名称。 (但是没有理由不使用它,并且有很多理由要遵守约定。)

© www.soinside.com 2019 - 2024. All rights reserved.