Не удается разрешить Пилинту «слишком много экземпляров-атрибутов» - PullRequest
0 голосов
/ 04 сентября 2018

Кажется, что-то происходит за кулисами с Линтером и несколькими моими уроками. У меня есть несколько классов со слишком многими (до 26 в одном случае) атрибутами экземпляра. Один я смог исправить, сгруппировав некоторые связанные атрибуты в новые классы. Тем не менее, этот метод не работает для меня на последнем классе. Все атрибуты на данный момент являются примитивами, и я могу легко разбить их на связанные группы. Оскорбляющий класс следует:

class BigClass():
    """
    This class has too many (16/8) instance attributes!
    """
    a = float(0)
    b = float(0)
    c = float(0)
    d = float(0)
    e = float(0)
    f = float(0)
    g = float(0)
    h = float(0)
    i = float(0)
    j = float(0)
    k = float(0)
    l = float(0)
    m = float(0)
    n = float(0)
    o = float(0)
    p = float(0)

Затем я разбил его на два класса, сгруппировав соответствующие атрибуты.

class SmallClass1():
    """
    This class is smaller, it has 8/8 attributes.
    It is a logical grouping of 8 attributes that were
    previously found in BigClass()
    """
    a = float(0)
    b = float(0)
    c = float(0)
    d = float(0)
    e = float(0)
    f = float(0)
    g = float(0)
    h = float(0)

class SmallClass2():
    """
    This class is smaller, it has 8/8 attributes.
    It is a logical grouping of 8 attributes that were
    previously found in BigClass()
    """
    i = float(0)
    j = float(0)
    k = float(0)
    l = float(0)
    m = float(0)
    n = float(0)
    o = float(0)
    p = float(0)

class NewBigClass():
    """
    This class still has too many (16/8) instance attributes!
    """
    grouping1 = SmallClass1()
    grouping2 = SmallClass2()

Однако линтер по-прежнему утверждает, что в объявлении NewBigClass () слишком много атрибутов. Я что-то упускаю, возможно, основное понимание того, чего пытается избежать это предупреждение? Я не уверен, почему мне удалось решить это для одного класса, но не для всех. Все они придерживаются одинакового расположения.

Я ценю любую помощь.

1 Ответ

0 голосов
/ 04 сентября 2018

Я решил свою проблему.

Проводя рефакторинг моих классов, чтобы уменьшить количество атрибутов экземпляра, я запустил pylint перед полной рефакторингом этого класса на протяжении всего проекта. Это означало, что, хотя я разбил class.a, class.b и т. Д., Я все еще назначал class.a где-то еще в проекте.

После исправления этих ссылок было исправлено мое предупреждение Pylint.

Спасибо всем, кто внес свой вклад.

...