Skip to content

Commit d3bd0d8

Browse files
authored
Merge pull request faif#243 from eclectic-boy/patch-1
Allow delegator to return delegate's properties
2 parents ede5733 + a0fe948 commit d3bd0d8

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

fundamental/delegation_pattern.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,38 @@
1313
class Delegator(object):
1414
"""
1515
>>> delegator = Delegator(Delegate())
16+
>>> delegator.p1
17+
123
18+
>>> delegator.p2
19+
Traceback (most recent call last):
20+
...
21+
AttributeError: 'Delegate' object has no attribute 'p2'
1622
>>> delegator.do_something("nothing")
1723
'Doing nothing'
1824
>>> delegator.do_anything()
19-
25+
Traceback (most recent call last):
26+
...
27+
AttributeError: 'Delegate' object has no attribute 'do_anything'
2028
"""
2129

2230
def __init__(self, delegate):
2331
self.delegate = delegate
2432

2533
def __getattr__(self, name):
26-
def wrapper(*args, **kwargs):
27-
if hasattr(self.delegate, name):
28-
attr = getattr(self.delegate, name)
29-
if callable(attr):
30-
return attr(*args, **kwargs)
34+
attr = getattr(self.delegate, name)
35+
36+
if not callable(attr):
37+
return attr
3138

39+
def wrapper(*args, **kwargs):
40+
return attr(*args, **kwargs)
3241
return wrapper
3342

3443

3544
class Delegate(object):
45+
def __init__(self):
46+
self.p1 = 123
47+
3648
def do_something(self, something):
3749
return "Doing %s" % something
3850

0 commit comments

Comments
 (0)