2016-05-04 18 views
2

Ich fand keine Best Practice darüber, was in den Klassen und __init__ Docstrings dokumentiert werden sollte. Manchmal finde ich, dass die Konstruktorargumente bereits in den Klassen Docstring dokumentiert sind, manchmal sind sie im Docstring __init__ beschrieben. Ich bevorzuge es, die Konstruktion innerhalb der Klassen Docstring zu beschreiben, da dies beim Erstellen einer neuen Instanz aufgerufen wird. Aber was sollte dann in den __init__ Methoden Docstring dokumentiert werden?Gibt es einen Konsens, was in den Klassen und __init__ Docstrings dokumentiert werden sollte?


edit:

Ich weiß um die google styleguide und die google docstring style example, aber beide nicht meine Frage beantworten. Das docstring Stil Beispiel sagt

Die __init__ Methode docstring entweder in der Klassenstufe dokumentiert werden kann, oder als docstring auf der __init__ Methode selbst. Entweder Form ist akzeptabel, aber die beiden sollten nicht gemischt werden. Wählen Sie eine Konvention, um die __init__ Methode zu dokumentieren und konsistent zu sein.

Aber wenn ich wählen Sie die docstring der __init__ Funktion in die Klasse Ebene docstring setzen, was soll das __init__ docstring enthalten?

Antwort

0

ich persönlich versuchen, die google styleguide wenn möglich

zu verwenden, wenn Sie eine neue Instanz mit __init__ schaffen es dokumentiert werden soll, welche Membervariablen initialisiert werden. Dann wissen andere, was sie erwarten können, wenn sie später in ihrem Code auf sie zugreifen müssen.

Probe aus dem Styleguide google:

class SampleClass(object): 
    """Summary of class here. 

    Longer class information.... 
    Longer class information.... 

    Attributes: 
     likes_spam: A boolean indicating if we like SPAM or not. 
     eggs: An integer count of the eggs we have laid. 
    """ 

    def __init__(self, likes_spam=False): 
     """Inits SampleClass with blah.""" 
     self.likes_spam = likes_spam 
     self.eggs = 0 

    def public_method(self): 
     """Performs operation blah.""" 
+0

Ich versuche, dass guid zu verwenden, auch, aber es antwortet nicht meine Frage, wie ich in meiner aktualisierten Frage gesagt habe. –

+0

imho sollten Sie dokumentieren, welche Member (die nicht "private") Variablen initialisiert sind. Dann wissen andere Leute, was sie erwarten können, wenn sie auf sie zugreifen. – salomonderossi

0

Google ihre eigenen Styleguide für Python hat, die nicht eine schlechte Sache zu beziehen. Hier ist ein Link zu dem, was sie als Best Practices für Doc-Strings betrachten: http://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html

+0

Sie beantworten meine Frage nicht, wie ich in meiner aktualisierten Frage gesagt habe. –

+0

Von Ihrer aktualisierten Frage: "Aber wenn ich den Docstring der Funktion __init__ in den Docstring auf Klassenebene setzen möchte, was sollte der __init__ Docstring enthalten?" Basierend auf dem Styleguide sollte Ihre __init__ Methode in diesem Fall keinen Docstring haben. – coralvanda

1

Mir ist kein Konsens in diesem Punkt bekannt.

jedoch das sphinx autodoc Modul ermöglicht Dokumentation von Ihrem docstring erzeugt werden Folglich neigt sie dazu, im Einklang docstring Dokumentation zu erzwingen.

In Ihrem Fall würde ich dokumentieren, was die class ist und die Konstruktorargumente im classdocstring wie:

class MyClass: 
    """I am a class. 
    I do funny stuff 

    :type tags: dict 
    :param tags: A dictionary of key-value pairs 
    """ 

    def __init__(tags): 
     self.tags = tags 
+0

Wie ich schon sagte, würde ich das auch gerne tun. Aber da die meisten Anleitungen Sie ermutigen, auch Docstrings für spezielle Funktionen zu schreiben, frage ich mich, was der '__init__'-Docstring enthalten sollte, da er lediglich eine Klasseninstanz initialisieren sollte. Auch mit Werkzeugen wie Sphinx werden Informationen, die im Docstring von speziellen Funktionen geschrieben sind, in der gebauten Dokumentation nicht angezeigt, wenn ich nicht falsch liege. –

+0

Nun, da es in dieser Frage keinen Konsens gibt und soweit ich weiß, geht es in keiner offiziellen Python-Dokumentation darum. Ich würde eher sagen, tun Sie, was Sie für am besten halten. Ich denke, die wirkliche Frage hier ist, warum Sie Docstring zu speziellen Funktionen dann hinzufügen möchten (zu welchem ​​Zweck)? Ich meine in welchem ​​Kontext? Soll der Code dokumentiert werden, um Dokumente zu generieren? – Oleiade