草庐IT

decorator

全部标签

python - 有没有办法进入装饰函数,跳过装饰器代码

我有一个模块,它使用自定义装饰器装饰一些关键函数。用pdb调试这些函数通常有点痛苦,因为每次我进入装饰函数时,我首先必须单步调试装饰器代码本身。我当然可以将调试器设置为在我感兴趣的函数内中断,但作为关键函数,它们会从许多地方多次调用,所以我通常更喜欢在函数外开始调试。我试着用代码来说明它,但我不知道这是否有帮助:defi_dont_care_about_this(fn):@functiontools.wraps(fn)defwrapper(*args,**kwargs):returnfn(*args,**kwargs)returnwrapper@i_dont_care_about_th

python - 装饰器模块 vs functools.wraps

decoratormodule的功能和functools.wraps密切相关。两者之间有什么区别(从Python3.3/3.4开始)?我知道一个区别:3+yearsago,decorator支持帮助,而wraps没有(参见this)。 最佳答案 您链接到的文档中列出了其中一个主要区别:decorator保留了包装函数的签名,而wraps则没有。 关于python-装饰器模块vsfunctools.wraps,我们在StackOverflow上找到一个类似的问题:

Flask 的 Python 装饰器

我需要为Flask路由函数添加一个python装饰器,(基本上我编辑了here中的代码)defrequires_admin(f):defwrapper(f):@wraps(f)defwrapped(*args,**kwargs):#ifnotadmin:#returnrender_template('error.html')returnf(*args,**kwargs)returnwrappedreturnwrapper然后像这样使用它就可以了:@app.route('/admin/action')@requires_admindefAdminAction():#NOerrorifNO

python - 如何装饰子类中的继承方法?

我不太确定如何在继承的方法上使用装饰器。通常装饰器放在定义之前,但对于继承的函数,定义在父类而不是子类中给出。我想避免重写子类中方法的定义,并简单地指定将装饰器放在继承的方法周围。为了让自己更清楚,这是我的意思的一个工作示例:classPerson():def__init__(self,age):self.age=age@classmethoddefgets_drink(cls,):print"it'stimetogetadrink!"return"Abeer"defdec(some_f):deflegal_issue(obj,):some_f(obj)return'ACoke'ret

python - 在 Django PermissionDenied 中发送自定义消息

每当不允许用户访问任何页面时,我正在使用django的PermissionDenied呈现403.html。有很多不同类型的页面,例如,产品页面,用户页面,用户联系信息,所有者信息。我想添加带有PermissionDenied的自定义消息,这将告诉用户他不能查看此页面的确切原因。我想将以下动态消息添加到403.html。Youhavearetryingto`ViewaProduct(id:3094384)`whilehavinga`Trail`account.Youarenotauthorizedtoviewthisproduct.和Youhavearetryingto`ViewaCu

python - 未调用属性装饰器的 setter 方法

我正在尝试使用属性方法来设置类实例的状态,具有以下类定义:classResult:def__init__(self,x=None,y=None):self.x=float(x)self.y=float(y)self._visible=Falseself._status="Youcan'tseeme"@propertydefvisible(self):returnself._visible@visible.setterdefvisible(self,value):ifvalue==True:ifself.xisnotNoneandself.yisnotNone:self._visible

python - 在python中装饰递归函数

我很难理解装饰递归函数的工作原理。对于以下代码段:defdec(f):defwrapper(*argv):print(argv,'Decorated!')return(f(*argv))return(wrapper)deff(n):print(n,'Original!')ifn==1:return(1)else:return(f(n-1)+n)print(f(5))printdec_f=dec(f)print(dec_f(5))printf=dec(f)print(f(5))输出是:(5,'Original!')(4,'Original!')(3,'Original!')(2,'Ori

c# - 在 C# 中实现方法装饰器

在python中可以实现函数装饰器来扩展函数和方法的行为。特别是我正在将设备库从python迁移到C#。与设备的通信可能会产生错误,这些错误应该通过自定义异常重新引发。在python中我会这样写:@device_error_wrapper("DeviceA","Errorwhilesettingoutputvoltage.")defset_voltage(self,voltage):"""Safelysettheoutputvoltageofdevice."""self.__handle.write(":source:voltage:level{0}".format(voltage))

python - 在装饰器类中,访问包含装饰方法的类的实例

我有以下装饰器,它在调用用@saveconfig装饰的方法后保存配置文件:classsaveconfig(object):def__init__(self,f):self.f=fdef__call__(self,*args):self.f(object,*args)#Hereiwanttoaccess"cfg"definedinpbtoolsprint"Savingconfiguration"我在下面的类中使用这个装饰器。方法createkvm被调用后,配置对象self.cfg应该保存在装饰器中:classpbtools()def__init__(self):self.configfi

Python:编写接受参数的装饰器的快捷方式?

Python标准库是否有编写接受参数的装饰器的快捷方式?例如,如果我想写一个像with_timeout(timeout)这样的装饰器:@with_timeout(10.0)defcook_eggs(eggs):whilenoteggs.are_done():eggs.cook()我必须写这样的东西:defwith_timeout(timeout):_func=[None]defwith_timeout_helper(*args,**kwargs):withTimeout(timeout):return_func[0](*args,**kwargs)defwith_timeout_ret