Comment gérer le message "too-many-instance-attributes" de Pylint?

je viens d'essayer de lint un peu de code avec Pylint, et la dernière erreur restante est

R0902: too-many-instance-attributes (8/7)

je comprends la logique derrière la limitation du nombre d'attributs d'instance, mais seven semble un peu faible. Je me rends compte aussi que le linter ne doit pas avoir le dernier mot. Cependant, je voudrais savoir ce que je devrais faire au lieu de:

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

si j'empaquette les géométries dans un DCT, faire quelque chose d'autre pour arrêter pylint se plaindre, ou juste l'ignorer (que je n'a pas vraiment envie de le faire)?

32
demandé sur Zero Piraeus 2014-06-26 19:27:12

3 réponses

Un linter d'emploi est de vous faire prendre conscience des problèmes potentiels avec votre code, et comme vous le dites dans votre question, il ne devrait pas avoir le dernier mot.

si vous avez considéré ce que pylint a à dire et décidé que pour cette classe, les attributs que vous avez sont appropriés( ce qui me semble raisonnable), vous pouvez à la fois Supprimer l'erreur et indiquer que vous avez considéré le problème en ajoutant un commentaire désactivant à votre classe:

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

de cette façon, vous n'ignorez pas Pylint, ni un esclave; vous l'utilisez comme utile, mais faillible outil, il est.

Par défaut, Pylint produira un message d'information lorsque vous localement désactiver une case:

 Locally disabling too-many-instance-attributes (R0902) (locally-disabled)

vous pouvez prévenir message d'apparaître dans l'une des deux façons suivantes:

  1. Ajouter un disable= drapeau lors de l'exécution de pylint:

    $ pylint --disable=locally-disabled frob.py 
    
  2. Ajouter une directive pylintrc fichier de configuration:

    [MESSAGES CONTROL]
    disable = locally-disabled
    
47
répondu Zero Piraeus 2015-05-24 16:16:32

c'est une objection idéologique, mais personnellement j'ai tendance à essayer de rendre ces changements aussi universels que possible. Si 7 n'est pas assez d'instances dans un fichier, et que je choisis de l'autoriser ici, pourquoi pas partout? Je n'apporte pas toujours de changements aux règles sur les peluches, mais j'y pense au moins. À cette fin, si vous voulez faire un changement dans votre .changement de fichier pylintrc max-attributes=7 dans le DESIGN section.

puisque je pense que 7 est un peu bas à travers le conseil d'administration, j'ai changé:

[DESIGN]
max-attributes=7

max-attributes=12
12
répondu Ian 2018-04-18 15:42:56

la réponse du Pirée Zéro est bonne. Cela dit, Puisque vous donnez peu de contexte à votre init méthode, même pas un vrai nom de classe, il est difficile d'être affirmatif, mais je dirais que filename et moddir n'ont rien à faire à part la marge, La position, etc.

5
répondu NChauvat 2014-06-27 07:21:27