Как бороться с Pylint "слишком-много-экземпляр-атрибуты сообщения"?
Я только что пытался Линт некоторый код с Pylint, и последняя оставшаяся ошибка
R0902: too-many-instance-attributes (8/7)
Я понимаю смысл ограничения количества атрибутов экземпляра, но семь, кажется, немного низко. Я также понимаю, что у линтера не должно быть последнего слова. Тем не менее, я хотел бы знать, что я должен делать вместо:
def __init__(self, output_file=None, output_dir=None):
"""
Set the frobnicator up, along with default geometries
"""
self.margin = 30
self.pos = [0, 0]
self.sep = [5, 5]
self.cell = [20, 20]
self.frobbr = library.Frobbr()
page = self.frobbr.get_settings('page')
self.lim = [page.get_width() - self.margin,
page.get_height() - self.margin]
self.filename = output_file
self.moddir = output_dir
должен ли я упаковать геометрию в дикт, сделать что-то еще, чтобы остановить жалобу Pylint или просто игнорировать ее (что Я действительно не хочу этого делать)?
3 ответов
задача линтера-информировать Вас о потенциальных проблемах с вашим кодом, и, как вы говорите в своем вопросе, у него не должно быть последнего слова.
если вы рассмотрели, что pylint должен сказать, и решили, что для этого класса атрибуты, которые у вас есть, подходят (что кажется мне разумным), вы можете как подавить ошибку, так и указать, что вы рассмотрели эту проблему, добавив отключающий комментарий к вашему классу:
class Frobnicator:
"""All frobnication, all the time."""
# pylint: disable=too-many-instance-attributes
# Eight is reasonable in this case.
def __init__(self):
self.one = 1
self.two = 2
self.three = 3
self.four = 4
self.five = 5
self.six = 6
self.seven = 7
self.eight = 8
таким образом, вы не игнорируете Pylint ни раб к нему; вы используете его как полезный, но ошибочный инструмент.
по умолчанию Pylint выдает информационное сообщение при локальном отключении проверки:
Locally disabling too-many-instance-attributes (R0902) (locally-disabled)
можно запретить это сообщение от появления одним из двух способов:
-
добавить
disable=
флаг при запуске pylint:$ pylint --disable=locally-disabled frob.py
-
добавить директиву
pylintrc
конфиг файл:[MESSAGES CONTROL] disable = locally-disabled
max-attributes=7 на .
так как я думаю, что 7 немного низкий поперек на доске я сменил:
[DESIGN]
max-attributes=7
до
max-attributes=12
ответ от нуля Пирей является хорошим. Тем не менее, поскольку вы предоставляете мало контекста для вашего init метод, даже не реальное имя класса, трудно быть утвердительным, но я бы сказал, что filename и moddir не имеют ничего общего с маржей, позицией и т. д.
операции ввода-вывода часто лучше всего изолировать в функции, а не помещать в методы. Их часто много различных форматов и вариантов сериализации, и большую часть времени вы не хотите смешивать их с вашей объектной логикой (методами). Легче добавить новую функцию ввода-вывода, которая принимает некоторый файл, строку, blob или что-то еще и возвращает объект, закодированный в нем, чем поддерживать объект, который имеет много методов, которые обрабатывают много различных операций ввода-вывода.