Perhaps I'm misunderstanding something, but I don't think that's really
typical decorator behavior? Typically decorators, as I understand them,
take an instance argument -- so you wouldn't be saying
def __init__(self):
self.decorated = Decorated()
you'd be saying
def __init__(self, decorated):
self.decorated = decorated
As for the attribute access, I believe you can override __getattr__ to do
what you want:
class Decorator:
[snip]
def __getattr__(self, request):
return self.decorated.__getattr__(request)
The same thing should work for methods, although you may want to pass
arguments through as well.
Is there a reason why, for this use, just making Decorator a subclass of
Decorated (and only overriding the methods you need to be different)
wouldn't work?
On Thu, 13 Aug 2009 08:50:47 -0700, Evan Kroske <e.kro...@gmail.com> wrote:
I'm trying to use the decorator pattern in a program I'm developing. I
want
to create a decorator object that works like the object it's decorating
except for a few functions. However, I'd rather not hard-code all the
identical functionality from the decorated object into the decorator
object.
Is there a way I can intercept all the attribute and function requests
for
the decorator and delegate them to the decorated object? Here's some
example
code:
class Decorator:
def __init__():
self.decorated = Decorated()
def newFunction():
# Do something
pass
def interceptRequests(request):
return self.decorated.request()
class Decorated:
def __init__():
self.variable = 10
def oldFunction():
# Do something
pass
I want to be able to do something like this:
objectA = Decorator()
objectB = Decorated()
assert objectA.oldFunction() == objectB.oldFunction() # No error
Is it possible (without inheritance)?
--
Evan Kroske
http://welcome2obscurity.blogspot.com/
The code, comments, and challenges of a novice
software developer desperate for attention.
--
Rami Chowdhury
"Never attribute to malice that which can be attributed to stupidity" --
Hanlon's Razor
408-597-7068 (US) / 07875-841-046 (UK) / 0189-245544 (BD)
--
http://mail.python.org/mailman/listinfo/python-list