Python design patterns

Ich suche nach Ressourcen, die Beispiele für Best Practices, Design-Muster und die SOLID-Prinzipien mit Python geben.

6 Solutions collect form web for “Python design patterns”

Einige überlappen sich in diesen

Intermediate und Advanced Software Carpentry in Python

Code wie ein Pythonista: Idiomatic Python

Python-Idiome und Effizienz

Google Entwickler-Tag US – Python Design Patterns

Eine weitere Ressource ist zum Beispiel bei den Pythonrezepten . Eine gute Zahl nicht folgen Best Practices, aber man findet dort einige Muster, die nützlich sind

Art

>>> import this 

In einer Python-Konsole.

Obwohl dies normalerweise als ein (feiner) Witz behandelt wird, enthält er ein paar gültige pythonspezifische Axiome.

Bruce Eckels " Thinking in Python " lehnt sich stark auf Design Patterns

Du kannst hier und hier loslegen .

Für eine eingehendere Betrachtung von Design-Pattners sollten Sie sich an Design Patterns: Elemente der wiederverwendbaren objektorientierten Software anschauen. Der Quellcode ist nicht in Python, aber es muss nicht für Sie sein, um die Muster zu verstehen.

Etwas, das Sie verwenden können, um Ihren Code zu vereinfachen, wenn Sie Attribute auf Objekten aufrufen, die möglicherweise nicht existieren, ist, das Null-Objekt-Design-Muster zu verwenden (zu dem ich in Python-Kochbuch eingeführt wurde ).

Grob ist das Ziel mit Null-Objekten, einen "intelligenten" Ersatz für den oft verwendeten primitiven Datentyp Keine in Python oder Null (oder Null-Zeiger) in anderen Sprachen zu liefern. Diese werden für viele Zwecke verwendet, einschließlich des wichtigen Falles, in dem ein Mitglied einer Gruppe von sonst ähnlichen Elementen aus irgendeinem Grund besonders ist. Am häufigsten führt dies zu bedingten Aussagen, um zwischen gewöhnlichen Elementen und dem primitiven Nullwert zu unterscheiden.

Dieses Objekt isst nur den Mangel an Attribut Fehler, und Sie können vermeiden, für ihre Existenz zu überprü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" 

Mit diesem, wenn du Null("any", "params", "you", "want").attribute_that_doesnt_exists() machst Null("any", "params", "you", "want").attribute_that_doesnt_exists() es wird nicht explodieren, aber nur still das Äquivalent des pass .

Normalerweise würdest du so etwas machen

 if obj.attr: obj.attr() 

Damit machst du einfach:

 obj.attr() 

Und vergiss es Achten Sie darauf, dass eine umfangreiche Verwendung des Null Objekts möglicherweise Fehler in Ihrem Code verstecken kann.

Sie können auch diesen Artikel lesen (wählen Sie die .pdf-Datei), die Design Patterns in dynamischen objektorientierten Sprachen (dh Python) diskutiert. Um die Seite zu zitieren:

Dieses Papier untersucht, wie die Muster aus dem "Gang of Four" oder "GOF" -Buch, wie es oft genannt wird, erscheinen, wenn ähnliche Probleme mit einer dynamischen, höherwertigen, objektorientierten Programmiersprache angesprochen werden. Einige der Muster verschwinden – das heißt, sie werden direkt von Sprachmerkmalen unterstützt, manche Muster sind einfacher oder haben einen anderen Fokus, und einige sind im Wesentlichen unverändert.

  • Ist das Besuchermuster für dynamisch typisierte Sprachen nützlich?
  • Python - sollte ich statische Methoden oder Top-Level-Funktionen verwenden
  • Implementierung des Dekorationsmusters in Python
  • Name des Entwurfsmusters: Klasse von Klassenstufe erhalten
  • Elegante finden Unterliste in Liste
  • Wie schreibe ich Strategie Pattern in Python anders als Beispiel in Wikipedia?
  • Vorzuweisung einer Liste von Keine
  • Design-Muster in Projekten verwendet
  • Mit einer Klasse '__new__ Methode als Factory: __init__ wird zweimal aufgerufen
  • Python ist die beste Programmiersprache der Welt.