2015-03-14 2 views
2

Я прочитал наивысший рейтинг ответа на this question, и он говорит, что мы должны назвать суперкласс '__init__, если нам нужно, и нам не нужно. Но мой вопрос связан скорее с конвенцией.Python convention: должен ли я обычно называть суперкласс '__init__?

Должен ли я обычно, как правило, всегда называют суперкласс __init__ в моем классе __init__, независимо от того, в настоящее время или нет я нужен "функциональность в этом методе?

+1

Пожалуйста, не голосуйте, чтобы закрыть этот вопрос. Я вижу, что было бы полезно закрыть другие языки. Python, однако, сильно подчеркивает соглашения о кодировании и что такое «Pythonic», включая идею о том, что в целом должен быть один правильный способ писать вещи; поэтому я думаю, что это правильный вопрос, по существу спрашивающий, является ли это Pythonic включать по умолчанию вызов __init__ суперкласса или нет. – Ghopper21

+0

@ Ghopper21 Спасибо за поддержку, пожалуйста, проголосуйте за открытие. –

+0

Если бы это была конвенция, вам, вероятно, не пришлось бы так много искать, чтобы получить ответ. Кажется, это проблема, основанная на мнениях: иногда ** удобно ** вызывать 'super().__init__', в другое время вы можете выполнить инициализацию члена вручную. – jepio

ответ

2

No. Вы должны, как правило, не , как правило, всегда называете суперкласс __init__ в вашем классе __init__, независимо от того, действительно ли вы в настоящее время «потребность» функциональности в этом методе.


Для людей, которые так или иначе думают, что это может даже предположительно быть условность:

Это не условность в Python закодировать то, что вам не нужно. Некоторые люди имеют свои собственные соглашения, чтобы включить ненужные вещи; возможно, во имя «защитного программирования» или потому, что они используются на другом языке, на котором требуется больше шаблонов.

Где заключаются соглашения Python, когда у вас есть выбор между несколькими способами выразить что-то полезное. Это правда, что Python не подчеркивает краткость выше всего остального. Но это не значит, что это подчеркивает многословие. Поэтому позвольте мне добавить это, если это не ясно:

Вы должны обычно, как правило, всегда избегайте ненужного кода шаблона. (И не только в Python.)

0

Некоторые классы нуждаются в их методе __init__ для вызова. Они используют свои атрибуты наборов методов __init__, которые понадобятся.

Пример:

class one(): 
    def __init__ (self): 
     self.number = 20 
    def show_number(self): 
     return self.number 

Если вы унаследовали от указанного класса, вам нужно будет вызвать метод __init__ для того, чтобы определить атрибут number. Если метод __init__ не вызывается, вы можете получить сообщение об ошибке при попытке вызвать метод show_number.

Что касается синтаксиса, если ничего не происходит в методе унаследованного класса __init__, его не нужно называть. Если вы считаете, что вызов метода __init__ не приведет к запутыванию других, вы всегда можете объяснить свои рассуждения комментариями. Это не наносит вреда называть его, даже если вам это не нужно.

Смежные вопросы