Является ли self требованием в __init__ и других методах / функциях? - PullRequest
1 голос
/ 25 октября 2019

Я пытаюсь создать графический интерфейс tkinter с несколькими фреймами, и при создании класса я включаю __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__ или оно подразумевается? Это означает, что вам не нужно включать его?

Что будет в действительности, если не включать его, если это возможно?

Ответы [ 2 ]

0 голосов
/ 25 октября 2019
  1. Вы смешиваете две вещи: self подразумевается, когда конструктор (метод __init__) имеет значение , называемое . (То же самое относится и к любому другому методу istance.) Это означает, что вам не нужно (и фактически: вы не можете) передать его при создании экземпляра и просто написать: my_app = MathematicalQuizApp() (без передачи параметра self).

  2. В определении конструктора (и любого метода instace) самый первый параметр неявно принимается как сам экземпляр отсюда и название. Если вы пропустите добавление параметра, представляющего экземпляр, в любой метод экземпляра, Python примет первый параметр, который вы указали в определении метода, в качестве экземпляра. Это, скорее всего, приведет к исключению.

  3. Вы можете использовать любое другое имя переменной для параметра self. Название self просто условно. (Но нет причин не использовать его, и есть много причин придерживаться соглашения.)

0 голосов
/ 25 октября 2019

Не видел ссылку на видео, но я подозреваю, что подразумевается под видео «подразумевается само и что вам не нужно его использовать», что вам не нужно использовать self внутри блока init, но подразумевается, что init будет передан init в качестве первого аргумента.

По сути, независимо от того, как вы хотите прочитать видео, ваш учитель прав. методы в классе получат ссылку на объект в первом параметре , (который обычно называется self, но вы можете даже изменить имя на что угодно. self не являетсяспециальное ключевое слово).

Используете ли вы внутри метода init или нет, это не имеет никакого отношения к тому факту, что ваш первый аргумент будет ссылкой на объект.

...