Patrons de Conception (Design Patterns)

Bonjour à tous,

J’ai commencé à m’intéresser au sujet des patrons de conception dans Python - je suis en train de lire Head first design patterns et d’implementer les exemples de code du livre dans Python. Est-ce que vous utilisez cette approche / une autre approche pour structurer votre code?

On a tendance à dire que les patterns ne s’appliquent pas directement à Python car conçus pour Java qui impose une structure qui est beaucoup plus rigide que Python mais je trouve intéressant de les investiguer comme exemples de l’application des principes de composition, encapsulation, etc etc.

Voilà je voulais avoir différents avis sur le sujet…

2 « J'aime »

Les patterns ne s’appliquent pas directement à Python car conçus pour Java

C’est en partie vrai.

Quelques exemples de trucs qui sont très simples en Python mais compliqués en Java:

# dans single.py
FOO = _Foo()

On veut qu’une seule instance de la class Foo, il suffit de créer l’instance lors de l’import du module (dont le code ne sera exécuté qu’une fois). Le fait que _Foo commence par un tiret bas est une indication pour empêcher sa construction en dehors des cas prévus.

funcs = {
   "a" : do_a
   "b": do_b
   "c": do_c
}

input = get_letters()
func = funcs.get(input)
func()

Ici on veut appeler différente fonctions suivant la valeur d’un paramètre. En Java ça se fait, mais il faut pas mal de classe(s) pour y arriver.

Et c’est en partie faux. Commande, Facade et Observer sont des pattterns qui fonctionnent très bien en Python aussi.

1 « J'aime »

À part ça, reprendre les exemples d’un bouquin dans un langage différent c’est une excellente façon d’apprendre :slight_smile:

1 « J'aime »

Prochaine étape : implémenter Model View Controller, enseigné dans le livre comme une combinaison d’Observer + Strategy + Composite, et qui forme l’architecture de notre cher Django.

Au delà de l’application « stricte » (dans le sens copier/coller du code), je trouve vraiment intéressant des les connaître. Ils apportent des solutions pour pas mal de cas. Et les appliquer permets de faire des trucs standards plutôt que des trucs tordus.
J’avais essayé de trouver l’équivalent pour des languages (Python, Ruby, go, etc). Au final c’est le principe qui reste bon :slight_smile:

1 « J'aime »

Le design patern, comme l’algorithmie est complètement indépendante du langage de programmation.
C’est un moyen de résoudre des problèmes d’algorithmie tout en conservant un code réutilisable, il peut être transposé à tous les langages de programmation même si c’est beaucoup plus naturel avec les langages orienté objet.
Elle est complètement applicable à python, c’est une excellente pratique.

1 « J'aime »

Je suis content de jouer le jeu du livre “head first” : les exemples, exercices et puzzles me permettent de mémoriser le vocabulaire et les patterns beaucoup plus rapidement.

On dirait que c’est (toujours) un sujet d’actualité: le dernier python bytes fait référence à cet article

1 « J'aime »

Si je peux me permettre un hors sujet (trop si que j’le fait hyper régulièrement :stuck_out_tongue: ) et si tu ne t’y est pas encore intéressé, en complément du patern design je te propose de jeter un oeil (pour la culture) sur le “mobile first”…

1 « J'aime »