Mangle function name with decorator?
Adam
adam.crossland at gmail.com
Tue Mar 17 12:35:05 EDT 2009
I am using Python 2.5, and I would like to write a decorator (or using
some other elegant, declarative approach) to mangle the name of
function in a class. I would like to be able to have two methods
declared with the same name, but one of them will have a decorator (or
whatever) that will change the name of one of them.
Example:
class A(object):
def __init__(self, method, usebar = False):
self.method = method
self.usebar = usebar
def __call__(self):
if self.usebar == True:
mangled_name = "_bar_" + self.method
if hasattr(self, mangled_name):
return getattr(self, mangled_name)()
else:
return getattr(self, self.method)()
else:
if hasattr(self, self.method):
return getattr(self, self.method)()
else:
raise NotImplementedError
@bar
def foo(self):
print "in _bar_foo"
def foo(self):
print "in foo"
Desired output:
>>>y = A("foo", True)
>>>y()
in _bar_foo
>>>z = A("foo")
>>>z()
in foo
More information about the Python-list
mailing list