Wie kann ich Python / Sphinx Dokumentobjektattribute nur in __init__ deklarieren?

8

Ich habe Python-Klassen mit Objektattributen, die nur als Teil der Ausführung des Konstruktors deklariert sind:

%Vor%

Wenn ich jetzt entweder help(Foo) verwende oder versuche, Foo in Sphinx zu dokumentieren, werden die Attribute self.basepath und self.availableruns nicht angezeigt. Das ist ein Problem für Benutzer unserer API.

Ich habe versucht, nach einem Standardweg zu suchen, um sicherzustellen, dass diese "dynamisch deklarierten" Attribute vom Parser gefunden werden können (und vorzugsweise geocodiert werden), aber bisher kein Glück. Irgendwelche Vorschläge? Danke.

    
andybuckley 18.10.2010, 13:25
quelle

2 Antworten

2

Sie könnten eine Klassenvariable mit demselben Namen wie die Instanzvariable definieren. Diese Klassenvariable wird dann von der Instanzvariable beschattet, wenn Sie sie festlegen. ZB:

%Vor%

Wenn die Instanzvariable einen nützlichen unveränderlichen Standardwert hat (z. B. None oder das leere Tupel), können Sie etwas Speicher sparen, indem Sie die Variable nicht setzen, wenn sie ihren Standardwert haben soll . Natürlich wird dieser Ansatz nicht funktionieren, wenn Sie über eine Instanzvariable sprechen, die Sie möglicherweise löschen möchten (z. B. del foo.availableruns ) - aber ich finde, das ist kein sehr häufiger Fall.

Wenn du sphinx benutzt und "autoattribute" gesetzt hast, sollte dies entsprechend dokumentiert werden. Oder, je nachdem, was Sie gerade tun, können Sie direkt die Sphinx .. py:attribute:: -Direktive verwenden.

    
Edward Loper 18.07.2011, 18:58
quelle
8
  

Ich habe versucht, nach einem Standardweg zu suchen, um sicherzustellen, dass diese "dynamisch deklarierten" Attribute vom Parser gefunden werden können (und vorzugsweise geocodiert werden), aber bisher kein Glück. Irgendwelche Vorschläge?

Sie können niemals von einem Parser "erkannt" werden.

Python hat setattr . Der vollständige Satz von Attributen ist in keinem Sinne des Wortes "nachweisbar".

Sie müssen sie unbedingt im Docstring beschreiben.

[Es sei denn, Sie wollen eine Menge Metaprogrammierungen machen, um Docstrings aus Dingen zu erzeugen, die Sie aus inspect oder etwas gesammelt haben. Selbst dann wäre Ihre "Lösung" unvollständig, sobald Sie setattr verwenden.]

%Vor%     
S.Lott 18.10.2010 14:20
quelle