Instanzattribut Attributname außerhalb von __init__ definiert
Ich teilte meine Klasse Konstruktor, indem Sie es rufen mehrere Funktionen, wie folgt:
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
Während mein Dolmetscher glücklicherweise läuft mein code Pylint ist eine Beschwerde:
Instance attribute attribute_name defined outside __init__
Einer flüchtigen Google-Suche ist derzeit fruchtlos. Halten Sie alle Konstruktor-Logik in __init__
scheint unorganisiert, und ausschalten der Pylint Warnung scheint auch hack-ish.
Was ist ein/der Pythonic Weg, um dieses problem zu beheben?
InformationsquelleAutor der Frage Steven Liao | 2013-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Idee, die hinter dieser Nachricht wird aus Gründen der Lesbarkeit. Wir erwarten zu finden, all die Attribute einer Instanz kann durch die Lektüre seiner
__init__
Methode.Können Sie immer noch wollen, um split-Initialisierung in andere Methoden aber. In einem solchen Fall können Sie einfach zuweisen von Attributen zu
None
(mit ein bisschen Dokumentation) in der__init__
dann rufen Sie die sub-Initialisierung Methoden.InformationsquelleAutor der Antwort sthenault
Einfach nur wieder ein Tupel aus
parse_arguments()
entpacken und in Attributen innerhalb__init__
als nötig.Außerdem würde ich empfehlen, dass Sie die Ausnahmen, die anstelle der Verwendung
exit(1)
. Sie erhalten tracebacks, der code ist wiederverwendbar, etc.InformationsquelleAutor der Antwort roippi