如何解决使用装饰器向字典添加功能
我想将功能添加到使用装饰修饰符存储在对象中的字典中。 我创建了一个类,并添加了一个名为“ add”的函数。该功能带有一个键和一个功能。 我希望当我调用'add'函数时,我在下面定义的函数将使用装饰器中的给定键添加到我的字典中。我可以通过将其添加到列表中来工作,但是我想使用一个键来具体访问这些功能。
这是我的代码:
class App:
def __init__(self):
self.functions = {}
def add(self,key,func):
self.functions[key] = func
app = App()
@app.add("hello")
def print_hello():
print("hello")
这是错误:
@app.function("hello")
TypeError: function() missing 1 required positional argument: 'func'
这是带有列表的工作代码:
class App:
def __init__(self):
self.functions = []
def add(self,func):
self.functions.append(func)
def loop_functions(self):
for f in self.functions:
f()
app = App()
@app.add
def print_hello():
print("hello")
app.loop_functions()
解决方法
如果可以使用key
作为实际函数名称,则实际上并不需要两个参数,那么可以使用.__name__
来获取函数名称,即key
字典中的self.functions
,而value
将是函数本身。
您可以使用以下内容:
class App:
def __init__(self):
self.functions = {}
def add(self,func):
self.functions[func.__name__] = func
app = App()
@app.add
def bye():
print('Goodbye')
>>> app.functions
# {'bye': <function __main__.bye()>}
>>> app.functions['bye']()
# Goodbye
,
找到了答案: 我需要在其中添加另一个装饰器:
def add(self,key):
def adder(func):
self.functions[key] = func
return func
return adder
但是正如另一个用户所说: 我可以使用'_ name _'访问函数名称并将其用作键。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。