Когда вызывать Python super () .__ init __ ()?

(Я не могу найти ссылку в любом месте по этому вопросу после некоторого Googling.)

С этим примером короткого кода можно четко продемонстрировать сценарий:

class X: def __init__(self, stuff): self.__stuff = stuff class Y(X): def __init__(self, stuff): # Is it safe to execute statements before calling super.__init__()? new_stuff = self.call_another_method(stuff) super(Y, self).__init__(new_stuff) 

Используя CPython 3.x, приведенный выше пример кода работает – при call_another_method() существует call_another_method() . Этот стиль кодирования в целом безопасен, но нахмурился или считался unPythonic? Я не могу найти совета по этому вопросу.

Почему меня это волнует?

Мой опыт связан с более традиционными объектно-ориентированными языками программирования, такими как C ++, C # и Java, где «super» нужно называть строго как первый оператор в конструкторе подкласса – игнорируя неявный аргумент с нулевым аргументом.

Если это имеет значение, я буду молодым Питонером: 3+, пожалуйста.

One Solution collect form web for “Когда вызывать Python super () .__ init __ ()?”

Да, совершенно безопасно вызывать другие вещи перед super() . Python не устанавливает порядок, и для этого существует множество прецедентов.

Обратите внимание, что вызов super().__init__() – это просто другое выражение в Python, это не синтаксическая конструкция. Вы также можете использовать внешние super() внешние методы, например, если вы передадите правильные аргументы.

В вашем случае вы можете опустить аргументы типа и экземпляра, Python 3 будет извлекать их для вас, когда super() вызывается без аргументов, потому что вы используете его в функции, определенной внутри класса:

 class Y(X): def __init__(self, stuff): new_stuff = self.call_another_method(stuff) # super(Y, self) is implicit here: super().__init__(new_stuff) 
  • Пакет 4 байтовых целых числа в bytearray или массив
  • Не удается распечатать определенную строку из текстового файла
  • UnicodeEncodeError при использовании функции компиляции
  • Как преобразовать двоичный код в число с плавающей запятой
  • читать исходный ввод с клавиатуры в python
  • Python 3, urllib POST submit
  • Python, самый быстрый способ перебора регулярных выражений, но останавливаться на первом совпадении
  • _Exact_ эквивалент `b '...' .decode (" utf-8 "," backslashreplace ")` в Python 2
  •  
    Interesting Posts for Van-Lav

    Python / iptables: захват всех UDP-пакетов и их исходного назначения

    ImportError: нет модуля с именем model_selection

    Python: (sub) Эквивалентность строк vs Список быстрого тестирования членства

    Быстрое преобразование временных меток для расчета продолжительности

    Python: использование и оптимизация памяти при изменении списков

    Получите результаты dis.dis () в строке

    Нити многопроцессорности Python никогда не присоединяются при большом объеме работы

    Где материал «печатает», когда приложение не работает с терминала?

    Создание raw-сокета в Python без привилегий root

    простой способ удаления миллисекунд из объекта dython datetime.datetime из python

    Как развернуть функцию в python с ее зависимостями?

    Я не знаю, что s находится в Python

    Почему __init__ явно необязательный?

    Python: получить словарные ключи как список, отсортированный по значению словаря

    Определите, была ли удалена задача. GAE Python

    Python - лучший язык программирования в мире.