Was ist die maximale Länge für ein Attribut name, das in python?
Ich Schreibe ein Satz von python-Funktionen, die Sie durchführen einige Art der übereinstimmungsprüfung auf eine source-code-Projekt. Ich möchte, um anzugeben, ziemlich ausführliche Namen für diese Funktionen, z.B.: check_5_theVersionOfAllVPropsMatchesTheVersionOfTheAutolinkHeader()
Könnte so übermäßig langen Namen ein problem sein für python? Gibt es eine maximale Länge für Attribut-Namen?
- Bitte tun Sie das nicht. Lange Namen sind nicht immer schlecht, aber Sie sind ein code smell. In diesem Fall würde ich kürzen Sie den Namen und eine detailliertere Beschreibung in einer doc-string. Außerdem würde ich entweder die Ergebnisse protokollieren wortreich oder werfen eine klar geschriebene Ausnahme zu erklären, die fehlgeschlagen überprüfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
2.3. Bezeichner und Schlüsselwörter aus Der Sprache Python Referenz:
Aber Sie werden gegen PEP-8 die meisten wahrscheinlich, die ist nicht wirklich cool:
Auch Sie werden gegen PEP-20 (das Zen von Python):
AggregateAccountabilityViewManager<AlternateSetupScrollingLoaderView> aggregateAccountabilityViewManagerForAlternateSetupScrollingLoaderViews = new AggregateAccountabilityViewManager<AlternateSetupScrollingLoaderView>();
(als random Java-Beispiel) im code. Nur weil code-Vervollständigung macht sowas viel einfacher zu schreiben bedeutet nicht, sollten Sie.LongIdentifierName<LongerIdentifierName<EvenLongerIdentifierName, EvenLongerIdentifierName>, WhyWouldYouEvenDothis<ImAskingYouWhy<AndThisOneIsJustForTheHeckOfIt>>>>
. Auch wenn Sie brechen es auf Zeilen und Einzüge verwenden, es ist noch viel chaotischer als mit anständig beschreibende und dennoch prägnante Bezeichner und setzen eine korrekte Beschreibung an anderer Stelle (und delnan macht einen guten Punkt, um die (fehlende) inline-Formatierung wie auch).ComparisonResult
) Operatoren mit etwas, das legt Metadaten-Objekte und-eine Funktion, die generisch erzeugt die Protokollierung für die Prüfungen, können Sie am Ende mit etwas wieverify(all_v_props.version == auto_link_header.version)
, das sich eine nette ausführliche Nachricht, die für Erfolg oder Misserfolg.Sie könnte ein problem für die Programmierer. Halten Sie die Funktionsnamen sind relativ kurze, und verwenden Sie docstrings zu dokumentieren.
Seit Attribut-Namen nur bekommen, Hash-und wandte sich in, um Schlüssel auf
inst.__dict__
für 99% der Klassen, die Sie jemals begegnen, es gibt keine wirkliche Grenze hängt von der Länge. Solange es hashable, dann funktioniert es wie ein Attribut name. Für das andere 1% der Klassen, die Geige mit__setattr__
\__getattr__
\__getattribute__
in einer Weise, brechen Sie die Garantie, dass alles hashable ist ein gültiges Attribut-Namen, obwohl die vorherigen nicht gelten.Natürlich, wie andere haben darauf hingewiesen, Sie haben code style und Qualität betrifft, mit mehr benannte Attribute. Wenn Sie finden, sich selbst benötigen, so lange Namen haben, ist es wahrscheinlich ein Anzeichen für einen design-Fehler in Ihrem Programm, und Sie sollten wahrscheinlich betrachten, geben Ihre Daten weiter, hierarchische Struktur und eine bessere Abstraktion und Teilung der Verantwortung in Funktionen und Methoden.
the interpreter doesnt hash method names on each invocation, see ...
getattr
und wie nennenintern
auf die argument-Namen. Ich weiß nicht, ob das ist, was passiert, aber das wäre meine Vermutung basiert auf edit. Guter Punkt auf jeden Fall, wie dieser ist eine Implementierung detail, und wahrscheinlich ändern.setattr
macht zu nutzen, Praktikum für Python-strings. hg.python.org/cpython/file/tip/Objects/object.c#l953