gpt4 book ai didi

python - 错误: Decorator takes exactly 2 arguments (1 given)

转载 作者:行者123 更新时间:2023-12-01 04:46:40 26 4
gpt4 key购买 nike

我正在尝试制作一个小装饰器,它可以在数据库更改后刷新 gui。问题是我仍然收到错误。当函数和装饰器不是某个类的一部分时,它可以工作。

class Tasks_Handling_Class:

def database_changed(self,func):
func()
self.refresh_tasks_attribute()

@database_changed
def add_task(self,name,desc,time_minutes):
try:
self.msq.insert_into_table('tasks',name,desc,time_minutes)
self.refresh_tasks_attribute()
return True
except Exception as e:
print e
return False

类型错误:database_changed() 恰好需要 2 个参数(给定 1 个)

我唯一想做的就是在 add_task() 方法之后运行 self.refresh_tasks_attribute() 方法。

您能给一些建议吗?

最佳答案

装饰器接受一个函数作为参数并返回一个新函数。这是一个非常简单的示例:

def noisy(func):
def new_func(*args, **kwargs):
print "hiyyyoooo!"
func(*args, **kwargs)
return new_func

您可以通过像常规函数一样调用它来在已定义的函数上使用它:

myfunc_noisy = noisy(myfunc)

或者您可以使用 @ 语法,但仅限于函数的定义:

@noisy
def myfunc():
print "hi"

就您而言,如果您只想在调用装饰函数后调用 refresh_tasks_attribute() ,那么您确实应该考虑这样做的频率,因为它可能更容易只需手动调用它即可。如果您仍然想使用装饰器,它看起来像这样:

def database_changed(func):
def new_func(*args, **kwargs):
self = args[0]
return_val = func(*args, **kwargs)
self.refresh_tasks_attribute()
return return_val
return new_func

关于python - 错误: Decorator takes exactly 2 arguments (1 given),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29265022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com