Design Patterns simplify building software by reusing successful designs and architectures. Patterns build on the collective experience of software engineers and architects. When encountered with a problem which needs new code to be written, an experienced software architect tends to make use of the rich ecosystem of available design/architecture patterns.
Patterns evolve when a specific design proves successful in solving certain classes of problems repeatedly. When experts find that a specific design or architecture helps them to solve classes of related problems consistently, they tend to apply it more and more, codifying the structure of the solution into a pattern.
Python, being a language which supports dynamic types, and high-level object oriented structures like classes and metaclasses, first-class functions, co-routines, callable objects, and so on, is a very rich playground for constructing reusable design and architecture patterns. In fact, as...