Ich suche nach Ressourcen, die Beispiele für Best Practices, Entwurfsmuster und die SOLID-Prinzipien mit Python enthalten.
Ich suche nach Ressourcen, die Beispiele für Best Practices, Entwurfsmuster und die SOLID-Prinzipien mit Python enthalten.
Antworten:
Einige überschneiden sich in diesen
Intermediate und Advanced Software Carpentry in Python
Code wie ein Pythonista: Idiomatisches Python
Python-Redewendungen und Effizienz
Google Developers Day US - Python-Entwurfsmuster
Eine weitere Ressource ist beispielsweise die Python-Rezepte . Eine gute Anzahl folgt nicht den Best Practices, aber Sie können dort einige Muster finden, die nützlich sind
Bruce Eckels " Thinking in Python " stützt sich stark auf Design Patterns
Sie können hier und hier loslegen .
Weitere Informationen zu Designmustern finden Sie unter Designmuster: Elemente wiederverwendbarer objektorientierter Software . Der Quellcode ist nicht in Python, muss aber nicht vorhanden sein, damit Sie die Muster verstehen.
Sie können Ihren Code vereinfachen, wenn Sie Attribute für Objekte aufrufen, die möglicherweise vorhanden sind oder nicht, indem Sie das Null-Objekt-Entwurfsmuster verwenden (das mir in Python Cookbook vorgestellt wurde ).
In etwa besteht das Ziel von Null-Objekten darin, den häufig verwendeten primitiven Datentyp None in Python oder Null (oder Null-Zeiger) in anderen Sprachen "intelligent" zu ersetzen. Diese werden für viele Zwecke verwendet, einschließlich des wichtigen Falls, in dem ein Mitglied einer Gruppe ansonsten ähnlicher Elemente aus irgendeinem Grund etwas Besonderes ist. Meistens führt dies zu bedingten Anweisungen zur Unterscheidung zwischen gewöhnlichen Elementen und dem primitiven Nullwert.
Dieses Objekt frisst nur das Fehlen von Attributfehlern, und Sie können vermeiden, auf ihre Existenz zu prüfen.
Es ist nichts weiter als
class Null(object):
def __init__(self, *args, **kwargs):
"Ignore parameters."
return None
def __call__(self, *args, **kwargs):
"Ignore method calls."
return self
def __getattr__(self, mname):
"Ignore attribute requests."
return self
def __setattr__(self, name, value):
"Ignore attribute setting."
return self
def __delattr__(self, name):
"Ignore deleting attributes."
return self
def __repr__(self):
"Return a string representation."
return "<Null>"
def __str__(self):
"Convert to a string and return it."
return "Null"
Wenn Sie dies tun Null("any", "params", "you", "want").attribute_that_doesnt_exists()
, explodiert es nicht, sondern wird stillschweigend zum Äquivalent von pass
.
Normalerweise würden Sie so etwas tun
if obj.attr:
obj.attr()
Damit machen Sie einfach:
obj.attr()
und vergiss es. Beachten Sie, dass eine umfassende Verwendung des Null
Objekts möglicherweise Fehler in Ihrem Code verbergen kann.
Möglicherweise möchten Sie auch diesen Artikel lesen (wählen Sie die PDF-Datei aus), in dem Entwurfsmuster in dynamischen objektorientierten Sprachen (z. B. Python) erläutert werden. Um die Seite zu zitieren:
In diesem Artikel wird untersucht, wie die Muster aus dem Buch "Gang of Four" oder "GOF", wie es oft genannt wird, erscheinen, wenn ähnliche Probleme mit einer dynamischen, objektorientierten Programmiersprache höherer Ordnung angegangen werden. Einige der Muster verschwinden - das heißt, sie werden direkt von Sprachfunktionen unterstützt, einige Muster sind einfacher oder haben einen anderen Fokus, andere bleiben im Wesentlichen unverändert.