草庐IT

装饰者

全部标签

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 - functools.wraps 相当于类装饰器

当我们装饰函数时,我们使用functools.wraps使修饰函数看起来像原始函数。当我们想装饰类时,有什么方法可以做同样的事情吗?defsome_class_decorator(cls_to_decorate):classWrapper(cls_to_decorate):"""SomeWrappernotimportantdoc."""passreturnWrapper@some_class_decoratorclassMainClass:"""MainClassimportantdoc."""passhelp(MainClass)输出:classWrapper(MainClass)

python - 如何在 Python 中查找装饰方法的包含类

我正在尝试实现一个装饰器类,它会装饰其他类中的方法。但是,我需要包含装饰器中可用的装饰方法的类。我似乎无法在任何地方找到它。这是一个例子:classmy_decorator(object):def__init__(self,arg1,arg2):print(self.__class__.__name__+".__init__")self.arg1=arg1self.arg2=arg2def__call__(self,my_callable):print(self.__class__.__name__+".__call__")print(type(my_callable))self.my

python - view_config 装饰器中的多个权限?

我正在为基于Pyramid框架的Web应用程序配置访问控制。我正在使用@view_config装饰器为我的View可调用对象设置权限。我有两个权限,即'read'和'write'。现在,我希望某些View需要两种权限。我无法弄清楚如何使用view_config执行此操作-我是否遗漏了什么,或者是否有其他方法可以执行此操作? 最佳答案 授予读写权限。每个View获得一个且仅一个权限,但每个主体可以映射到多个权限。 关于python-view_config装饰器中的多个权限?,我们在Stac

python - django 信号是否也包含在 transaction.atomic 装饰器中?

我有一个模型文件,它使用post_save信号在另一个表中创建链接行。以典型的方式,我可以从我的一个View创建一个页面,该页面用@transaction.atomic装饰。我想知道这个装饰器是否会将Page对象的创建和SharedPage对象的创建放在同一个事务中。从django文档中不清楚信号是该原子事务的一部分。模型.pyclassPage(models.Model):name=models.CharField(default='Mydefaultpage',max_length=200,blank=False)created_at=models.DateTimeField(au

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

python - 如何将装饰器附加到 python 中的函数 "after the fact"?

我对python中函数装饰器的理解(我可能是错的)是它们应该添加副作用并修改函数的返回值。现在装饰器被添加到要装饰的函数的函数定义之上或通过赋值。这是一个小例子:defprint_args_decor(function):defwrapper(*args,**kwargs):print'Arguments:',args,kwargs#Addedside-effectreturnfunction(*args,**kwargs)*5#Modifiedreturnvaluereturnwrapper@print_args_decordefdo_stuff(strg,n=10):"""Repe

python - 装饰函数可以访问装饰器的变量吗

我试图了解装饰器的工作原理,并且想知道装饰函数是否可以访问装饰器的变量。例如,在下面的代码中,如何让f1可以访问localVariable?这可能吗,这甚至是一种好的做事方式吗?deffuncDec(func):localVariable="I'malocalstring"deffunc2Return(*args):print"CallinglocalVariablefromdecorator"+localVariablefunc(*args)print"donewithcallingf1"returnfunc2Return@funcDecdeff1(x,y):printx+yprin