From 6f3bf75e285f6632d5be0201d090ea158f18ad7c Mon Sep 17 00:00:00 2001 From: Michele Simionato Date: Mon, 16 Mar 2015 15:08:58 +0100 Subject: The decorated function dictionary is a copy of the original function dictionary --- documentation.py | 9 ++++----- documentation3.py | 4 ++-- src/decorator.py | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/documentation.py b/documentation.py index 1548b5c..0aab054 100644 --- a/documentation.py +++ b/documentation.py @@ -780,9 +780,8 @@ you will get a ``NameError``: Finally, the implementation is such that the decorated function attribute ``.func_globals`` is a *copy* of the original function -attribute. On the other hand the function attribute dictionary -of the decorated function is just a reference to the -original function dictionary, i.e. ``vars(decorated_f) is vars(f)``: +attribute, just as thee attribute dictionary +of the decorated function. .. code-block:: python @@ -795,8 +794,8 @@ original function dictionary, i.e. ``vars(decorated_f) is vars(f)``: >>> traced_f.attr1 'something' >>> traced_f.attr2 = "something different" # setting attr - >>> f.attr2 # the original attribute did change - 'something different' + >>> f.attr2 # the original attribute did not change + 'something else' Compatibility notes --------------------------------------------------------------- diff --git a/documentation3.py b/documentation3.py index 5be0cca..92adac8 100644 --- a/documentation3.py +++ b/documentation3.py @@ -788,8 +788,8 @@ the original function dictionary: >>> traced_f.attr1 'something' >>> traced_f.attr2 = "something different" # setting attr - >>> f.attr2 # the original attribute did change, works in Python 3.4 - 'something different' + >>> f.attr2 # the original attribute did not change + 'something else' Compatibility notes --------------------------------------------------------------- diff --git a/src/decorator.py b/src/decorator.py index 4ed7247..ece2488 100644 --- a/src/decorator.py +++ b/src/decorator.py @@ -111,7 +111,7 @@ class FunctionMaker(object): allshortargs.append('**' + self.varkw) self.signature = ', '.join(allargs) self.shortsignature = ', '.join(allshortargs) - self.dict = func.__dict__ + self.dict = func.__dict__.copy() # func=None happens when decorating a caller if name: self.name = name -- cgit v1.2.1