__init__和其他方法/功能是否要求自我?

时间:2019-10-25 09:11:42

标签: python tkinter self

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

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

2 个答案:

答案 0 :(得分:0)

没有看过视频链接,但是我怀疑视频中“自我暗示”的含义是您不需要使用 init块中的self,但暗示将 作为第一个参数传递给init。

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

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

答案 1 :(得分:0)

  1. 您正在混淆两件事:当构造函数(self方法)被称为 时,则暗示__init__。 (对于其他所有istance方法也是如此。)这意味着,您不必(而且实际上:您不能)在创建实例时将其传递,只需编写:my_app = MathematicalQuizApp()(无需传递参数{ {1}}。

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

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