@bickford
Python backend, неуверенный mid

Как правильно использовать super()?

Сразу два вопроса. Первый:
При переопределении метода родительского класса super() должен вызываться первой строкой или последней?
def save(self, *args, **kwargs):
    # my code here
    super().save(*args, **kwargs)

или:
def save(self, *args, **kwargs):
    super().save(*args, **kwargs)
    # my code here

?
Второй вопрос:
При наследовании родительского класса и добавлении своей логики в один из его методов какой класс передавать в super()?
class Parent:
    def __init__(self, *args, **kwargs):
        pass

class Children(Parent):
    def __init__(self, *args, **kwargs):
        # some code
        super(Parent, self).__init__(*args, **kwargs)


Или:
class Children(Parent):
    def __init__(self, *args, **kwargs):
        # some code
        super(Children, self).__init__(*args, **kwargs)

?
  • Вопрос задан
  • 2727 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
  1. Зависит от логики вашего кода. В некоторых случаях метод суперкласса можно вообще не вызывать.
  2. Прежде всего надо заметить, что требования передавать класс в вызов super относится только к Python2. В Python3 можно просто super().__init__(*args, **kwargs) Но если класс всё-таки передаётся, то это должен быть тот класс, в методе которого происходит вызов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы