standard functions python instance-variables pylint code-readability code-structure

python - functions - pep8 spaces



¿Cómo lidiar con el mensaje de "demasiados atributos de instancia" de Pylint? (3)

Acabo de intentar quitarle un poco de código a Pylint, y el último error restante es

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

Entiendo la lógica de limitar el número de atributos de instancia, pero siete parece un poco bajo. También me doy cuenta de que la plantilla no debe tener la última palabra. Sin embargo, me gustaría saber qué debería hacer en lugar 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

¿Debo empaquetar las geometrías en un dict, hacer algo más para evitar que Pylint se queje, o simplemente ignorarlo (lo que realmente no quiero hacer)?


El trabajo de un intérprete es informarle sobre posibles problemas con su código y, como usted dice en su pregunta, no debería tener la última palabra.

Si ha considerado lo que tiene que decir pilylint y ha decidido que para esta clase, los atributos que tiene son apropiados (lo cual me parece razonable), puede suprimir el error e indicar que ha considerado el problema agregando un deshabilitador Comenta a tu clase:

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 esa manera, no estás ignorando a Pylint ni un esclavo; lo estás usando como la herramienta útil pero falible que es.

Por defecto, Pylint generará un mensaje informativo cuando deshabilite localmente un cheque:

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

Puede evitar que ese mensaje aparezca de una de estas dos maneras:

  1. Agregue un disable= bandera cuando ejecuta pylint:

    $ pylint --disable=locally-disabled frob.py

  2. Agregue una directiva a un archivo de configuración pylintrc :

    [MESSAGES CONTROL] disable = locally-disabled


Esta es una objeción ideológica, pero personalmente trato de hacer que este tipo de cambios sea lo más universal posible. Si 7 no son suficientes instancias en un archivo, y elijo permitirlo aquí, ¿por qué no en todas partes? No siempre hago cambios en las reglas de pelusas en todos los ámbitos, pero al menos lo considero. Para ello, si desea realizar un cambio general, en su archivo .pylintrc cambie max-attributes=7 en la sección DESIGN .

Como creo que 7 es un poco bajo en todos los ámbitos, he cambiado:

[DESIGN] max-attributes=7

a

max-attributes=12


La respuesta de Zero Piraeus es buena. Dicho esto, dado que proporciona poco contexto para su método init , ni siquiera un nombre de clase real, es difícil ser afirmativo, pero diría que filename y moddir no tienen nada que ver aparte de margen, posición, etc.

Las operaciones de IO a menudo son mejor aisladas en funciones que en métodos. A menudo hay muchos formatos y opciones de serialización diferentes, y la mayoría de las veces no desea mezclarlos con su lógica de objetos (métodos). Es más fácil agregar una nueva función IO que toma algún archivo, cadena, blob o lo que sea y devuelve el objeto codificado en él de lo que es mantener un objeto que tiene muchos métodos que manejan muchas operaciones de E / S diferentes.