| Nov |
DEC |
Jan |
|
20 |
|
| 2019 |
2020 |
2021 |
About this capture
The Wayback Machine - http://web.archive.org/web/20201220221839/https://github.com/faif/python-patterns
Skip to content
/;ref_cta:Sign up;ref_loc:header logged out">
Sign up
●
Features →
●Code review
●Project management
●Integrations
●Actions
●Packages
●Security
●Team management
●Hosting
●Mobile
●Customer stories →
●Security →
●
●
●
●Explore GitHub →
Learn & contribute
●Topics
●Collections
●Trending
●Learning Lab
●Open source guides
Connect with others
●Events
●Community forum
●GitHub Education
●GitHub Stars program
●
●
Plans →
●Compare plans
●Contact Sales
●Nonprofit →
●Education →
In this repository
All GitHub
↵
Jump to
↵
-
No suggested jump to results
{{ message }}
●
Watch
1.7k
●
Star
26.6k
●
Fork
5.5k
A collection of design patterns/idioms in Python
26.6k
stars
5.5k
forks
Star
Watch
●
Code
●
Issues
10
●
Pull requests
1
●
Actions
●
Projects
0
●
Security
●
Insights
More
●
Code
●
Issues
●
Pull requests
●
Actions
●
Projects
●
Security
●
Insights
1
branch
1
tag
Go to file
Code
Clone
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI.
Learn more.
●
Open with GitHub Desktop
●
Download ZIP
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio
If nothing happens, download the GitHub extension for Visual Studio and try again.
Latest commit
faif
Merge pull request #352 from techntools/correct-graph-search
f6adf63
Sep 26, 2020
Merge pull request #352 from techntools/correct-graph-search
Added base case and return the path as soon as end node is visited
f6adf63
Git stats
●
749
commits
Files
Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
patterns
Added base case and return the path as soon as end node is visited
Sep 26, 2020
tests
Fix borg tests
Aug 12, 2020
.coveragerc
Add coveragerc to ignore NotImplementedError's in tests
Jul 15, 2018
.gitignore
Update borg pattern to reflect discussion in issue#3
Jul 4, 2020
.travis.yml
Update tox.ini to use py37,py38 instead of ci37,ci38
Aug 12, 2020
Makefile
Added type hints to mediator pattern
Jul 21, 2020
README.md
Added alternative implementation for Iterator pattern using the Itera…
Feb 11, 2020
append_output.sh
add changes to example to contain client real-subject usage
Mar 10, 2020
requirements-dev.txt
Use random.seed for deterministic doctest outputs
Nov 11, 2019
setup.cfg
Ignore Flake8 rule W503
Aug 12, 2020
setup.py
Added dependency free makefile for mformatting
Jul 19, 2020
tox.ini
Update tox.ini to use py37,py38 instead of ci37,ci38
Aug 12, 2020
README.md
python-patterns
A collection of design patterns and idioms in Python.
Current Patterns
Creational Patterns:
| Pattern |
Description |
| abstract_factory |
use a generic function with specific factories |
| borg |
a singleton with shared-state among instances |
| builder |
instead of using multiple constructors, builder object receives parameters and returns constructed objects |
| factory |
delegate a specialized function/method to create instances |
| lazy_evaluation |
lazily-evaluated property pattern in Python |
| pool |
preinstantiate and maintain a group of instances of the same type |
| prototype |
use a factory and clones of a prototype for new instances (if instantiation is expensive) |
Structural Patterns:
| Pattern |
Description |
| 3-tier |
data<->business logic<->presentation separation (strict relationships) |
| adapter |
adapt one interface to another using a white-list |
| bridge |
a client-provider middleman to soften interface changes |
| composite |
lets clients treat individual objects and compositions uniformly |
| decorator |
wrap functionality with other functionality in order to affect outputs |
| facade |
use one class as an API to a number of others |
| flyweight |
transparently reuse existing instances of objects with similar/identical state |
| front_controller |
single handler requests coming to the application |
| mvc |
model<->view<->controller (non-strict relationships) |
| proxy |
an object funnels operations to something else |
Behavioral Patterns:
| Pattern |
Description |
| chain_of_responsibility |
apply a chain of successive handlers to try and process the data |
| catalog |
general methods will call different specialized methods based on construction parameter |
| chaining_method |
continue callback next object method |
| command |
bundle a command and arguments to call later |
| iterator |
traverse a container and access the container's elements |
| iterator (alt. impl.) |
traverse a container and access the container's elements |
| mediator |
an object that knows how to connect other objects and act as a proxy |
| memento |
generate an opaque token that can be used to go back to a previous state |
| observer |
provide a callback for notification of events/changes to data |
| publish_subscribe |
a source syndicates events/data to 0+ registered listeners |
| registry |
keep track of all subclasses of a given class |
| specification |
business rules can be recombined by chaining the business rules together using boolean logic |
| state |
logic is organized into a discrete number of potential states and the next state that can be transitioned to |
| strategy |
selectable operations over the same data |
| template |
an object imposes a structure but takes pluggable components |
| visitor |
invoke a callback for all items of a collection |
Design for Testability Patterns:
Fundamental Patterns:
| Pattern |
Description |
| delegation_pattern |
an object handles a request by delegating to a second object (the delegate) |
Others:
| Pattern |
Description |
| blackboard |
architectural model, assemble different sub-system knowledge to build a solution, AI approach - non gang of four pattern |
| graph_search |
graphing algorithms - non gang of four pattern |
| hsm |
hierarchical state machine - non gang of four pattern |
Videos
Design Patterns in Python by Peter Ullrich
Sebastian Buczyński - Why you don't need design patterns in Python?
You Don't Need That!
Pluggable Libs Through Design Patterns
Contributing
When an implementation is added or modified, please review the following guidelines:
Output
All files with example patterns have ### OUTPUT ### section at the bottom
(migration to OUTPUT = """...""" is in progress).
Run append_output.sh (e.g. ./append_output.sh borg.py) to generate/update it.
Docstrings
Add module level description in form of a docstring with links to corresponding references or other useful information.
Add "Examples in Python ecosystem" section if you know some. It shows how patterns could be applied to real-world problems.
facade.py has a good example of detailed description,
but sometimes the shorter one as in template.py would suffice.
In some cases class-level docstring with doctest would also help (see adapter.py)
but readable OUTPUT section is much better.
Python 2 compatibility
To see Python 2 compatible versions of some patterns please check-out the legacy tag.
Update README
When everything else is done - update corresponding part of README.
Travis CI
Please run toxortox -e ci37 before submitting a patch to be sure your changes will pass CI.
You can also run flake8orpytest commands manually. Examples can be found in tox.ini.
Contributing via issue triage
You can triage issues and pull requests which may include reproducing bug reports or asking for vital information, such as version numbers or reproduction instructions. If you would like to start triaging issues, one easy way to get started is to subscribe to python-patterns on CodeTriage.
About
A collection of design patterns/idioms in Python
Topics
python
idioms
design-patterns
Resources
Readme
1
tags
No packages published
+ 87 contributors
Languages
●
Python
98.0%
●
Makefile
1.6%
●
Shell
0.4%
●© 2020 GitHub, Inc.
●Terms
●Privacy
●Security
●Status
●Help
●Contact GitHub
●Pricing
●API
●Training
●Blog
●About
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session.
You signed out in another tab or window. Reload to refresh your session.