Created
January 22, 2014 14:48
-
-
Save atsuya046/8559979 to your computer and use it in GitHub Desktop.
GoF design pattern - Decorator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
"""http://stackoverflow.com/questions/3118929/implementing-the-decorator-pattern-in-python""" | |
class foo_decorator(object): | |
def __init__(self, decoratee): | |
self._decoratee = decoratee | |
def f1(self): | |
print("decorated f1") | |
self._decoratee.f1() | |
def __getattr__(self, name): | |
return getattr(self._decoratee, name) | |
class undecorated_foo(object): | |
def f1(self): | |
print("original f1") | |
def f2(self): | |
print("original f2") | |
@foo_decorator | |
class decorated_foo(object): | |
def f1(self): | |
print("original f1") | |
def f2(self): | |
print("original f2") | |
def main(): | |
u = undecorated_foo() | |
v = foo_decorator(u) | |
# The @foo_decorator syntax is just shorthand for calling | |
# foo_decorator on the decorated object right ofter its | |
# decoration. | |
v.f1() | |
v.f2() | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment