2012-02-01 2 views
18

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

+0

У этих классов вообще нет атрибутов или вы добавляете атрибуты после создания объекта? – delnan

+0

Либо. В первом случае я вижу, что это само по себе плохой запах, но не я не хочу идти прямо сейчас. В последнем случае я предпочел бы исключение атрибута, если я попытаюсь использовать его перед значимой инициализацией. – Pete

+0

У вас есть код и вывод pylint для показа? По какой-то причине Пилинт обычно жалуется на __init__. Если это действительно так, то нужно исправить :) – sthenault

ответ

11

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

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

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

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

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

1

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

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