Согласно документам Python super()
полезен для доступа к унаследованным методам, которые были переопределены в классе.
Я понимаю, что super относится к родительскому классу и позволяет вам получить доступ к родительским методам. Мой вопрос: почему люди всегда используют super внутри метода init дочернего класса? Я видел это повсюду. Например:
class Person:
def __init__(self, name):
self.name = name
class Employee(Person):
def __init__(self, **kwargs):
super().__init__(name=kwargs['name']) # Here super is being used
def first_letter(self):
return self.name[0]
e = Employee(name="John")
print(e.first_letter())
Я могу сделать то же самое без super и даже без метода init:
class Person:
def __init__(self, name):
self.name = name
class Employee(Person):
def first_letter(self):
return self.name[0]
e = Employee(name="John")
print(e.first_letter())
Есть ли недостатки у последнего кода? Мне он кажется намного чище. Мне даже не нужно использовать стандартный синтаксис **kwargs и kwargs['argument'].
Я использую Python 3.8. Изменить: вот другой вопрос о переполнении стека, в котором есть код от разных людей, которые используют super в дочернем методе инициализации. Я не понимаю, почему. Я думаю, что в Python 3.8 появилось что-то новое.