web-dev-qa-db-fra.com

python modèles de conception

Je cherche des ressources qui donnent des exemples de meilleures pratiques, de modèles de conception et des principes SOLID utilisant Python.

164
Ted Smith

Certains se chevauchent dans ces

Menuiserie logicielle intermédiaire et avancée en Python

Code comme un Pythonista: Python Idiomatique

Idiomes et efficacité de Python

Google Developers Day US - Python)

Une autre ressource est par exemple à Recettes Python . Un bon nombre ne suit pas les meilleures pratiques, mais vous pouvez y trouver des modèles utiles.

151
Ed.

Type

>>> import this

dans une console Python.

Bien que cela soit généralement traité comme une (bien!) Blague, il contient quelques axiomes valides spécifiques à Python.

24
Anonymous

Le " Thinking in Python " de Bruce Eckel s'appuie fortement sur les modèles de conception

13
leancz

Vous pouvez commencer ici et ici .

Pour un examen plus approfondi des concepteurs, vous devez consulter Modèles de conception: éléments d'un logiciel orienté objet réutilisable . Le code source n'est pas en Python, mais il n'est pas nécessaire que vous compreniez les modèles.

6
Brian R. Bondy

Une chose que vous pouvez utiliser pour simplifier votre code lorsque vous appelez des attributs sur des objets qui pourraient ou non exister consiste à utiliser le modèle Null Object Design Pattern (auquel j'ai été introduit dans Python Cookbook ).

En gros, l’objectif avec les objets Null est de fournir un remplacement "intelligent" du type de données primitif souvent utilisé, Aucun dans Python ou Null (ou des pointeurs Null) dans d’autres langages. objectifs importants, 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, il en résulte des instructions conditionnelles permettant de distinguer les éléments ordinaires de la valeur Null primitive.

Cet objet mange juste le manque 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 faites Null("any", "params", "you", "want").attribute_that_doesnt_exists(), il n'explosera pas, mais deviendra simplement l'équivalent de pass.

Normalement, vous feriez quelque chose comme

if obj.attr:
    obj.attr()

Avec cela, vous faites juste:

obj.attr()

et oublie ça. Attention, l'utilisation intensive de l'objet Null peut potentiellement masquer des bugs dans votre code.

5
Esteban Küber

Vous voudrez peut-être aussi lire ceci article (sélectionnez le fichier .pdf), qui traite des modèles de conception dans des langages orientés objets dynamiques (p.ex. Python). Pour citer la page:

Cet article explore la manière dont les motifs du livre "Gang of Four" ou "GOF", comme on l'appelle souvent, apparaissent lorsque des problèmes similaires sont résolus à l'aide d'un langage de programmation dynamique, d'ordre supérieur, orienté objet. Certains modèles disparaissent - c’est-à-dire qu’ils sont directement pris en charge par les fonctionnalités du langage, que certains modèles sont plus simples ou ont un objectif différent et que d’autres sont essentiellement inchangés.

3
Gilad Naor