[Python-Leipzig] Treffen am Dienstag, 12. Mai 2015, 20:00 Uhr

Stefan Schwarzer sschwarzer at sschwarzer.net
Fr Mai 15 07:47:49 UTC 2015


On 2015-05-14 01:35, Markus Zapke-Gründemann wrote:
> ich wollte mich, auch im Namen von René, bei allen bedanken, die zur
> Vorstellung von durga[1] zum letzten Treffen gekommen sind. Euer
> Feedback war für uns sehr interessant und hat uns einige Hinweise auf
> Möglichkeiten zur Optimierung gegeben.

Gern geschehen! :-)

> Außerdem habe ich noch einmal zu Stefan Schwarzers Hinweis zur
> Formulierung von Docstrings recherchiert. In PEP 257[5] steht
> tatsächlich:
> 
>> The docstring (…) prescribes the function or method's effect as a command ("Do this", "Return that"), not as a description; e.g. don't write "Returns the pathname ...".

Genau das meinte ich. Ich hatte es bei unserem Treffen nur
fälschlicherweise bei PEP 8 eingeordnet.

Ich habe noch ein paar Anmerkungen:

- Im Nachhinein bin ich mir nicht so sicher, ob
  `Collection.elements` eine "gute" Property ist. Einfache
  berechnete Attribute sind ok, aber beim implizit
  ausgelösten Holen der Ressource kann so viel schiefgehen,
  dass man das vielleicht nicht im Abfragen eines
  vermeintlichen Attributes "verstecken" sollte. Ich würde
  deshalb ziemlich sicher `elements()` als Methode
  definieren.

  Allgemein mache etwas nur dann zur Property, wenn es zur
  Abstraktion passt, nicht, wenn es "sich anbietet". (Das
  wurde beim Treffen auch nicht so gesagt, ich wollte es nur
  erwähnen.) Wenn eine Property zur Abstraktion passt, ist
  das nicht nur "natürlicher", sondern verringert vermutlich
  auch die Wahrscheinlichkeit, dass man die Property
  nachträglich in eine Methode umwandeln muss.

- Einige Docstrings (zum Beispiel `Collection.values` und
  `Collection.value_list`) geben etwas anderes zurück als im
  Docstring angegeben ist. Beispielsweise heißt es im
  Docstring von `values`: "Returns a list of dictionaries
  instead of Element instances." Tatsächlich gibt die
  Methode aber `self` zurück.

  Nebenbei: Ich würde den Teil "instead of ..." weglassen.
  Das ist verwirrend, weil sich der Leser fragen muss:
  "Warum 'statt `Element`-Instanzen'? Warum sollte `values`
  denn `Element`-Instanzen liefern?"

- Ich bin mir nicht so sicher, inwieweit man einen
  `get_`-Präfix verwenden sollte. Warum heißt es bei
  `Collection` zum Beispiel `count` (ohne `get`), aber
  `get_element` (mit `get`)?

  Ich bin seit langer Zeit dazu übergegangen, keine
  `get_`-Präfixe mehr zu verwenden und werde das höchstens
  ändern, wenn mir jemand ein überzeugendes Kriterium nennen
  kann, wann man `get_` verwenden sollte und wann nicht. :-)

  Das einzige Kriterium, das ich mir vorstellen kann, ist,
  `get_` bei jeder Query-Methode zu verwenden, aber das
  würde viele APIs recht geschwätzig machen.

  Kennt jemand ein gutes Kriterium dafür, wann man einen
  `get_`-Präfix verwenden sollte?

- Dann noch ein Punkt, den ich noch nach dem eigentlichen
  Treffen genannt hatte: Zum Prüfen, ob ein Container
  Elemente enthält, würde ich `if container:` verwenden,
  nicht `if len(container):` wie in ein paar Stellen im
  Code. Ich denke, ersteres ist die typische, idiomatische
  Schreibweise.

> Ansonsten habe ich, resultierend aus eurem Feedback und den Erfahrungen
> aus der Vorstellung, noch weitere Issues erstellt[7].

Markus oder René, sagt mir bitte Bescheid, wenn ich zu einem
oder mehreren Punkten oben Tickets eingeben soll.

Liebe Grüße
Stefan



Mehr Informationen über die Mailingliste Python-Leipzig