Почему PyLint предупреждает об отсутствии __init__?

19

У нас есть множество классов Python, которые, по-видимому, не нуждаются в __init__ , и инициализация их пустыми является либо совершенно приемлемой, либо даже предпочтительной. PyLint, кажется, думает, что это плохо. Я не понимаю, почему отсутствие __init__ - это плохой запах? Или я должен просто подавить эти предупреждения и преодолеть их?

    
задан Pete 01.02.2012 в 18:46
источник
  • У этих классов вообще нет атрибутов или вы добавляете атрибуты после создания объекта? –  Feb 1 '12 at 17:48 01.02.2012 в 18:48
  • Либо. В первом случае я вижу, что это само по себе плохой запах, но не я не хочу идти прямо сейчас. В последнем случае я предпочел бы исключение атрибута, если я попытаюсь использовать его перед значимой инициализацией. –  Pete 01.02.2012 в 18:50
  • есть ли у вас код и вывод pylint для показа? По какой-то причине Пилинт обычно жалуется на init. Если на самом деле нет, то нужно исправить :) –  sthenault 02.02.2012 в 09:29
  • @sthenault, я не думаю, что это ошибка Pylint как таковая, правильно, что нет __init__. Я больше спрашивал, использую ли я ужасно непитоновскую идиому, которая, я думаю, не таков. –  Pete 06.02.2012 в 13:01

2 ответа

12

Для чего вы используете эти классы?

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

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

При этом, если вам не нужен __init__() , не стесняйтесь игнорировать это предупреждение.

edit: Исходя из вашего комментария, кажется, что вы в порядке с AttributeError, которую вы получите при обращении к переменным перед инициализацией. Это прекрасный способ программирования ваших классов, поэтому в этом случае разумно игнорировать предупреждение от PyLint.

    
ответ дан Andrew Clark 01.02.2012 в 18:53
1

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

    
ответ дан kindall 01.02.2012 в 18:48