Вызов конструктора родительского класса с помощью super () против использования имени родительского класса - PullRequest
3 голосов
/ 06 августа 2020

Почему, когда я пытаюсь вызвать конструктор родительского класса с помощью super (), мне не нужно передавать 'self' в качестве аргумента:

super().__init__(x,y)

Но когда я его вызываю используя сам родительский класс (в данном случае называемый Parent), необходимо передать аргумент 'self'.

Parent.__init__(self,x,y)

(x и y здесь являются атрибутами родительского класса)

Просто хочу чтобы разобраться в предыстории логи c здесь. Спасибо!

1 Ответ

4 голосов
/ 06 августа 2020

Это потому, что super() может вызываться только внутри определения метода класса (как в __init__), и он всегда ссылается на себя. Следовательно, в этом нет необходимости, это избыточно.

Интересно, что вы упомянули: self раньше требовалось всего несколько лет go (может быть 5 ... Я не могу вспомнить).

Думайте об этом как о вызове методов. Если у меня есть следующий класс:

class Conversation:
  def __init__(self):
    pass
  def hi(self, name):
    print(f'How are you doing, {name}?')

convo = Conversation()
convo.hi('Jason')

(output): 'How are you doing, Jason?'

Мне не нужно было указывать self при вызове convo.hi, мне нужно было только передать аргумент name. Зачем? Потому что self всегда нужен и, следовательно, избыточен.

Та же идея с super(). :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...