python - ejemplo - Atributo de instancia attribute_name defined outside__init__
docstring python ejemplo (2)
La idea detrás de este mensaje es por el bien de la legibilidad. Esperamos encontrar todos los atributos que una instancia pueda tener al leer su método __init__
.
Sin embargo, es posible que desee dividir la inicialización en otros métodos. En tal caso, puede simplemente asignar atributos a None
(con un poco de documentación) en __init__
luego llamar a los métodos de __init__
.
Separé el constructor de mi clase dejándolo invocar múltiples funciones, como esta:
class Wizard:
def __init__(self, argv):
self.parse_arguments(argv)
self.wave_wand() # declaration omitted
def parse_arguments(self, argv):
if self.has_correct_argument_count(argv):
self.name = argv[0]
self.magic_ability = argv[1]
else:
raise InvalidArgumentsException() # declaration omitted
# ... irrelevant functions omitted
Mientras mi intérprete ejecuta felizmente mi código, Pylint tiene una queja:
Instance attribute attribute_name defined outside __init__
Una búsqueda superficial en Google es actualmente infructuosa. Mantener toda la lógica de constructor en __init__
parece desorganizada, y apagar la advertencia de Pylint también parece piratear.
¿Cuál es la forma de Python para resolver este problema?
Simplemente devuelva una tupla de parse_arguments()
y descomprima en atributos dentro de __init__
según sea necesario.
Además, recomendaría que use Excepciones en lugar de usar exit(1)
. Obtiene trazados, su código es reutilizable, etc.
class Wizard:
def __init__(self, argv):
self.name,self.magic_ability = self.parse_arguments(argv)
def parse_arguments(self, argv):
assert len(argv) == 2
return argv[0],argv[1]