Given the following example 2.7 code: from functools import wraps class require_keys: def __init__(self, *keys): self.keys = keys def __call__(decorator_self, fn): @wraps(fn) def result_fn(method_self, *args, **kwargs): # import pdb; pdb.set_trace() req = method_self.__private() for key in decorator_self.keys: if key not in req: raise ValueError("Missing [%s] parameter" % key) return fn(method_self, *args, **kwargs) return result_fn class Foo(object): def __init__(self, *params): self.params = params self.__private = params * 2 def __private(self, *args, **kwargs): return self.__private @require_keys("hello", "world") def action(self): print self.params f1 = Foo("hello", "world") f1.action() f2 = Foo("world") f2.action()
I'm surprised to get the exception: Traceback (most recent call last): File "dec_examp.py", line 28, in <module> f1.action() File "dec_examp.py", line 10, in result_fn req = method_self.__private() AttributeError: 'Foo' object has no attribute '_require_keys__private' For some reason, it's looking for "_require_keys__private" (which obviously doesn't exist) instead of "_Foo__private" which exists and would be what I expect. What am I missing here? Why is the decorator class finding the wrong private-scope? Thanks, -tkc -- https://mail.python.org/mailman/listinfo/python-list