Passing parameters thru decorators
andrew.holway at otternetworks.de
andrew.holway at otternetworks.de
Wed Apr 12 16:42:22 EDT 2017
Hi,
I'm trying to work out how to pass parameters through decorators:
class Meow():
def __init__(self, arg1, arg2):
print("INIT ClassBasedDecoratorWithParams")
print(arg1)
print(arg2)
def makebold(self, fn):
def wrapped():
return "<b>" + fn() + "</b>"
return wrapped
banana = Meow("foo", "bar")
@banana.makebold("foobar")
def hello():
return "hello world"
print(hello())
Returns error:
INIT ClassBasedDecoratorWithParams
Traceback (most recent call last):
foo
File "/Users/andrew/PycharmProjects/untitled3/meow5.py", line 15, in <module>
bar
@banana.makebold("foobar")
TypeError: wrapped() takes 0 positional arguments but 1 was given
so I add a var to wrapped:
def makebold(self, fn):
def wrapped(flibble):
print(flibble)
return "<b>" + fn() + "</b>"
return wrapped
Returns error:
INIT ClassBasedDecoratorWithParams
Traceback (most recent call last):
foo
bar
File "/Users/andrew/PycharmProjects/untitled3/meow5.py", line 16, in <module>
<function hello at 0x1029198c8>
@banana.makebold("foobar")
File "/Users/andrew/PycharmProjects/untitled3/meow5.py", line 11, in wrapped
return "<b>" + fn() + "</b>"
TypeError: 'str' object is not callable
This is confusing me. How do I get hold of the "foobar" string so I can use it in the decorator?
Cheers,
Andrew
More information about the Python-list
mailing list