220 votes

Attribut d'instance nom_de_l'attribut défini en dehors de __init__

J'ai divisé le constructeur de ma classe en lui permettant d'appeler plusieurs fonctions, comme ceci :

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

Alors que mon interprète exécute mon code avec plaisir, Pylint se plaint :

Instance attribute attribute_name defined outside __init__

Une recherche rapide sur Google est actuellement infructueuse. En gardant toute la logique du constructeur dans __init__ semble mal organisé, et désactiver l'avertissement de Pylint semble également relever du piratage.

Qu'est-ce qu'un/la Pythoniques Comment résoudre ce problème ?

-1voto

lowzhao Points 1

Si vous utilisez Python 3, vous pouvez essayer

class Wizard:
    def __init__(self, argv):
        self.name: str = str()
        self.magic_ability: str = str()
        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

Bien qu'elle ne soit pas aussi pythonique que la réponse acceptée, elle devrait permettre d'éviter l'alerte Pylint.

Et si vous ne vous préoccupez pas du type et que vous ne voulez pas créer un nouvel objet avec object() utiliser :

class Wizard:
    def __init__(self, argv):
        self.name = type(None)()
        # ...

En tant que None provoquera une erreur de non correspondance du type.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X