Je recherche des ressources qui donnent des exemples de bonnes pratiques, de modèles de conception et des principes SOLID utilisant Python.
Je recherche des ressources qui donnent des exemples de bonnes pratiques, de modèles de conception et des principes SOLID utilisant Python.
Réponses:
Certains se chevauchent dans ces
Menuiserie logicielle intermédiaire et avancée en Python
Code comme un Pythonista: Python idiomatique
Google Developers Day US - Modèles de conception Python
Une autre ressource est par exemple dans les recettes Python . Un bon nombre ne suit pas les meilleures pratiques, mais vous pouvez y trouver des modèles utiles
" Penser en Python " de Bruce Eckel s'appuie fortement sur les modèles de conception
Vous pouvez commencer ici et ici .
Pour un examen plus approfondi des modèles de conception, vous devriez consulter Modèles de conception: éléments de logiciels orientés objet réutilisables . Le code source n'est pas en Python, mais il n'est pas nécessaire que vous compreniez les modèles.
Quelque chose que vous pouvez utiliser pour simplifier votre code lors de l'appel d'attributs sur des objets qui peuvent ou non exister est d'utiliser le modèle de conception d'objet nul (auquel j'ai été introduit dans Python Cookbook ).
En gros, l'objectif avec les objets Null est de fournir un remplacement «intelligent» pour le type de données primitif souvent utilisé None en Python ou Null (ou pointeurs Null) dans d'autres langages. Ceux-ci sont utilisés à de nombreuses fins, y compris le cas important où un membre d'un groupe d'éléments par ailleurs similaires est spécial pour une raison quelconque. Le plus souvent, cela se traduit par des instructions conditionnelles pour faire la distinction entre les éléments ordinaires et la valeur primitive Null.
Cet objet mange simplement l'absence d'erreur d'attribut et vous pouvez éviter de vérifier leur existence.
Ce n'est rien de plus que
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"
Avec cela, si vous le faites, Null("any", "params", "you", "want").attribute_that_doesnt_exists()
cela n'explosera pas, mais deviendra silencieusement l'équivalent de pass
.
Normalement, vous feriez quelque chose comme
if obj.attr:
obj.attr()
Avec cela, vous faites simplement:
obj.attr()
et oubliez ça. Attention, une utilisation intensive de l' Null
objet peut potentiellement masquer des bogues dans votre code.
Vous pouvez également lire cet article (sélectionnez le fichier .pdf), qui traite des modèles de conception dans les langages orientés objet dynamiques (p. Ex. Python). Pour citer la page:
Cet article explore comment les modèles du livre "Gang of Four", ou "GOF", comme on l'appelle souvent, apparaissent lorsque des problèmes similaires sont traités à l'aide d'un langage de programmation dynamique, d'ordre supérieur et orienté objet. Certains des modèles disparaissent - c'est-à-dire qu'ils sont pris en charge directement par les fonctionnalités du langage, certains modèles sont plus simples ou ont un objectif différent, et certains sont essentiellement inchangés.