Python-зачем вызывать методы во время init ()


Я просматривал некоторые учебники для некоторых вещей PyQt4, и это хорошо, но я не совсем понимаю, почему синтаксис при создании объекта таков:

class Example(QtGui.QMainWindow):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):               

        #code to set up instance variables and show() the window

Что именно получается от выполнения этого таким образом, а не просто полностью исключить вызов self.initUI() и просто поместить любой код, который задает атрибуты в __init__() после вызова super?

3   3  

3 ответа:

Иногда код разделяется на функции для удобства чтения.

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

Еще одна причина, по которой вы можете увидеть функцию "init", вызываемую из true __init__, заключается в том, что эта функция восстанавливает объект в новое состояние; в этом случае вы можете вызвать функцию " clean" функция извне __init__ в, например, пуле объектов.

Вы также намекнули на третью причину повторного использования в вашем собственном вопросе: если подклассу нужно изменить порядок, в котором происходят части инициализации (или опустить/полностью заменить некоторые части!) это невозможно с монолитным __init__ , но легко, если он разделен на отдельные части.

Четвертая и последняя причина-это профилирование. Если вы отслеживаете записи функций / exists и тайминги, отдельные функции дают вам более тонкая детализация в метриках времени.

Независимо от того, как вы кодируете, зависит от вас - но подход, который вы здесь подвергаете сомнению, имеет достоинства.

Возможно, чтобы снова вызвать initUI.

Я знаю только одну причину, такую же, как и большинство языков, - удобство использования. Ядро объектно-ориентированного программирования-это способность повторно использовать вещи, будь то классы, методы или переменные. Разделив наши различные методы / функции, мы можем вызвать их позже. Будете ли вы когда-нибудь звонить им позже...это спорно. Я думаю, что все сводится к хорошей практике программирования.