Ich habe Python Klassen mit Objektattributen, die nur als Teil deklariert den Konstruktor ausgeführt wird, etwa so:Wie kann ich Python/Sphinx Dokumentobjektattribute nur in __init__ deklarieren?
class Foo(object):
def __init__(self, base):
self.basepath = base
temp = []
for run in os.listdir(self.basepath):
if self.foo(run):
temp.append(run)
self.availableruns = tuple(sorted(temp))
Wenn ich jetzt entweder help(Foo)
oder versuchen, verwenden Foo
in Sphinx zu dokumentieren, die self.basepath
und self.availableruns
Attribute nicht gezeigt. Das ist ein Problem für Benutzer unserer API.
Ich habe versucht, nach einem Standard Weg zu suchen, um sicherzustellen, dass diese "dynamisch deklarierten" Attribute von dem Parser gefunden werden können (und vorzugsweise Docstring), aber bisher kein Glück. Irgendwelche Vorschläge? Vielen Dank.
Danke. Ja, ich weiß zu schätzen, dass die Attribute im Allgemeinen nicht berechenbar sind, nur war ich nicht sicher, ob es eine Heuristik gab, um einige von denen auf einfache/standardisierte Weise zu deklarieren, z. Quellenscannen statt Klassenobjektinspektion. Oder indem du den Code änderst, um diese Attribute als Eigenschaften zu deklarieren, damit Sphinx/help sie "findet". Aber egal, dieser Zeiger auf die Sphinx-Syntax für die Deklaration ihrer Existenz für Doc Zwecke wird gut tun: Prost! – andybuckley
"Oder indem Sie den Code ändern, um diese Attribute als Eigenschaften zu deklarieren"? "deklarieren" ist kein Python-Konzept. Die Verwendung von Eigenschaftsmethodenfunktionen für Ihre Attribute funktioniert, wenn Sie die Mitglieder automatisch dokumentieren lassen wollen. Das scheint mehr als Arbeit zu sein, als sie einfach im Docstring zu dokumentieren. –
Aber würde bedeuten, dass sie auf gleiche Weise mit anderen Methoden dokumentiert werden, was meiner Meinung nach die Qualität der Dokumentation erheblich verbessert.Ich bin bereit, dafür etwas mehr Arbeit zu leisten, wenn es die Leistung nicht trifft oder den Code undurchdringlich macht. Das war der Punkt der ersten Frage: Ich bin mir sicher, dass ich einen Weg finden kann, dies zu tun, aber ich habe mich gefragt, ob es einen (de facto) Standardansatz gibt, der die Nachteile minimiert. – andybuckley