À propos du projet

python-patterns est une collection de référence de patrons de conception et d'idiomes implémentés en Python. Plutôt qu'une bibliothèque, il s'agit d'une ressource d'apprentissage : chaque patron réside dans son propre petit module sous un dossier de catégorie, et le README les indexe avec de brèves descriptions. La couverture est organisée en plusieurs groupes. Les patrons de création incluent abstract_factory, borg, builder, factory, lazy_evaluation, pool et prototype. Les patrons structurels incluent 3-tier, adapter, bridge, composite, decorator, facade, flyweight, front_controller, mvc et proxy. Les patrons comportementaux incluent chain_of_responsibility, catalog, chaining_method, command, interpreter, iterator (avec une implémentation alternative), mediator, memento, observer, publish_subscribe, registry, servant, specification, state, strategy, template et visitor. Il existe également des exemples de conception pour la testabilité (dependency_injection avec trois variantes), un delegation_pattern fondamental, et d'autres patrons tels que blackboard, graph_search et une machine à états hiérarchique (hsm). Le README présente explicitement les patrons comme des compromis, encourageant les lecteurs à se concentrer sur la raison pour laquelle un patron est choisi plutôt que seulement sur la manière dont il est codé. Il documente également les anti-patrons déconseillés en Python, notamment singleton (les modules sont déjà des singletons), god object et la surutilisation de l'héritage, avec des alternatives suggérées telles que les variables au niveau du module, l'injection de dépendances, la composition et la délégation. Chaque module d'exemple est censé comporter une docstring au niveau du module avec des références et, lorsque c'est possible, une section « Examples in Python ecosystem » montrant une utilisation réelle. Le projet maintient un tag legacy pour les versions compatibles Python 2 de certains patrons. Les conseils de contribution couvrent les docstrings, les mises à jour du README et l'exécution de ./lint.sh pour le formatage, le linting, la vérification de types et les tests ; les dépendances de développement sont épinglées dans Pipfile.lock et régénérées avec make lock. Le triage des issues est pris en charge via CodeTriage, et le README renvoie à plusieurs conférences et vidéos sur les patrons de conception en Python.