FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python-patterns/strategy.py at master · Casperito/python-patterns · GitHub
Casperito
/
python-patterns
Public
forked from
faif/python-patterns
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
python-patterns
/
strategy.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
40 lines (27 loc) · 1.23 KB
Breadcrumbs
python-patterns
/
strategy.py
Copy path
File metadata and controls
40 lines (27 loc) · 1.23 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"""http://stackoverflow.com/questions/963965/how-is-this-strategy-pattern-written-in-python-the-sample-in-wikipedia
In most of other languages Strategy pattern is implemented via creating some base strategy interface/abstract class and
subclassing it with a number of concrete strategies (as we can see at http://en.wikipedia.org/wiki/Strategy_pattern),
however Python supports higher-order functions and allows us to have only one class and inject functions into it's
instances, as shown in this example.
"""
import
types
class
StrategyExample
:
def
__init__
(
self
,
func
=
None
):
self
.
name
=
'Strategy Example 0'
if
func
is
not
None
:
self
.
execute
=
types
.
MethodType
(
func
,
self
)
def
execute
(
self
):
print
(
self
.
name
)
def
execute_replacement1
(
self
):
print
(
self
.
name
+
' from execute 1'
)
def
execute_replacement2
(
self
):
print
(
self
.
name
+
' from execute 2'
)
if
__name__
==
'__main__'
:
strat0
=
StrategyExample
()
strat1
=
StrategyExample
(
execute_replacement1
)
strat1
.
name
=
'Strategy Example 1'
strat2
=
StrategyExample
(
execute_replacement2
)
strat2
.
name
=
'Strategy Example 2'
strat0
.
execute
()
strat1
.
execute
()
strat2
.
execute
()
Back
|
FazBrowse Home
|
New Git URL