草庐IT

Decorator

全部标签

作为基类一部分的 Python 装饰器不能用于装饰继承类中的成员函数

Python装饰器使用起来很有趣,但由于参数传递给装饰器的方式,我似乎碰壁了。在这里,我将一个装饰器定义为基类的一部分(装饰器将访问类成员,因此它需要self参数)。classSubSystem(object):defUpdateGUI(self,fun):#functiondecoratordefwrapper(*args):self.updateGUIField(*args)returnfun(*args)returnwrapperdefupdateGUIField(self,name,value):ifnameinself.gui:iftype(self.gui[name])==

作为基类一部分的 Python 装饰器不能用于装饰继承类中的成员函数

Python装饰器使用起来很有趣,但由于参数传递给装饰器的方式,我似乎碰壁了。在这里,我将一个装饰器定义为基类的一部分(装饰器将访问类成员,因此它需要self参数)。classSubSystem(object):defUpdateGUI(self,fun):#functiondecoratordefwrapper(*args):self.updateGUIField(*args)returnfun(*args)returnwrapperdefupdateGUIField(self,name,value):ifnameinself.gui:iftype(self.gui[name])==

python - 将装饰器应用于导入的函数?

我要导入一个函数:fromrandomimportrandint然后对其应用装饰器:@decoratorrandint我想知道这是否有一些语法糖(就像我上面所说的那样),还是我必须按如下方式进行:@decoratordefrandintWrapper(*args):returnrandom.randint(*args) 最佳答案 装饰器只是用装饰版本替换函数对象的语法糖,其中装饰只是调用(传入原始函数对象)。换句话说,语法:@decorator_expressiondeffunction_name():#functionbody大致

python - 将装饰器应用于导入的函数?

我要导入一个函数:fromrandomimportrandint然后对其应用装饰器:@decoratorrandint我想知道这是否有一些语法糖(就像我上面所说的那样),还是我必须按如下方式进行:@decoratordefrandintWrapper(*args):returnrandom.randint(*args) 最佳答案 装饰器只是用装饰版本替换函数对象的语法糖,其中装饰只是调用(传入原始函数对象)。换句话说,语法:@decorator_expressiondeffunction_name():#functionbody大致

python - 如何在python中做一个条件装饰器

是否可以有条件地装饰函数。例如,我想用定时器函数(timeit)装饰函数foo()只有doing_performance_analysis是True(见伪代码下面)。ifdoing_performance_analysis:@timeitdeffoo():"""dosomething,timeitfunctionwillreturnthetimeittakes"""time.sleep(2)else:deffoo():time.sleep(2) 最佳答案 装饰器只是返回替换的可调用对象,可选地是相同的函数、包装器或完全不同的东西。因

python - 如何在python中做一个条件装饰器

是否可以有条件地装饰函数。例如,我想用定时器函数(timeit)装饰函数foo()只有doing_performance_analysis是True(见伪代码下面)。ifdoing_performance_analysis:@timeitdeffoo():"""dosomething,timeitfunctionwillreturnthetimeittakes"""time.sleep(2)else:deffoo():time.sleep(2) 最佳答案 装饰器只是返回替换的可调用对象,可选地是相同的函数、包装器或完全不同的东西。因

python - 获取装饰函数的名称?

这个问题在这里已经有了答案:Preservingsignaturesofdecoratedfunctions(8个回答)关闭4年前.这是我的装饰器:defcheck_domain(func):defwrapper(domain_id,*args,**kwargs):domain=get_object_or_None(Domain,id=domain_id)ifnotdomain:returnNonereturnfunc(domain_id,*args,**kwargs)returnwrapper这是一个包装好的函数:@check_domaindefcollect_data(domain

python - 获取装饰函数的名称?

这个问题在这里已经有了答案:Preservingsignaturesofdecoratedfunctions(8个回答)关闭4年前.这是我的装饰器:defcheck_domain(func):defwrapper(domain_id,*args,**kwargs):domain=get_object_or_None(Domain,id=domain_id)ifnotdomain:returnNonereturnfunc(domain_id,*args,**kwargs)returnwrapper这是一个包装好的函数:@check_domaindefcollect_data(domain

python - 在装饰函数完成后,如何让 Python 装饰器运行?

我想使用装饰器来处理各种功能的审核(主要是DjangoView功能,但不限于此)。为了做到这一点,我希望能够审核函数post-execution-即函数正常运行,如果它无异常返回,那么装饰器会记录这一事实。类似:@audit_action(action='didsomething')defdo_something(*args,**kwargs):ifargs[0]=='foo':return'bar'else:return'baz'audit_action只会在函数完成后运行。 最佳答案 装饰器通常返回一个包装函数;只需在调用包装函

python - 在装饰函数完成后,如何让 Python 装饰器运行?

我想使用装饰器来处理各种功能的审核(主要是DjangoView功能,但不限于此)。为了做到这一点,我希望能够审核函数post-execution-即函数正常运行,如果它无异常返回,那么装饰器会记录这一事实。类似:@audit_action(action='didsomething')defdo_something(*args,**kwargs):ifargs[0]=='foo':return'bar'else:return'baz'audit_action只会在函数完成后运行。 最佳答案 装饰器通常返回一个包装函数;只需在调用包装函