草庐IT

decorator

全部标签

java - 为什么我们需要装饰器设计模式中的装饰器?

假设我有一个名为A的类,并且我想使用装饰器设计模式。如果我错了请纠正我,但要让它起作用,我们需要创建一个装饰器类,比如ADecorator,它将保存对A实例的引用,所有其他装饰器将扩展它以添加功能。我不明白为什么我们必须创建装饰器类,而不是使用A实例? 最佳答案 装饰器模式用于动态地(即在运行时)向对象添加功能。通常,当您编写类时,对象的功能就会固定。但重要的一点是,对象的功能以对对象的客户端透明的方式扩展,因为它实现与原始对象相同的接口(interface),将责任委托(delegate)给装饰对象。装饰器模式适用于对象可能具有许

Java CDI : Decorator with multiple generic params

我有以下结构:@DecoratorpublicabstractclassMyDecoratorimplementsEntityService{@Any@Inject@DelegateEntityServicedelegate;@OverridepublicTsave(Tentity){...}}这是EntityService接口(interface)声明:publicinterfaceEntityService{Tsave(Tentity);voiddeleteById(Integerid);voiddeleteAllById(Listids);voiddelete(Tentity);

python - 使用定义为实例变量的装饰器函数

(虽然这个问题是专门针对Flask的,但可以根据标题进行概括)我正在尝试在类中使用Flask的app.route()装饰器。然而,Flask应用程序被初始化为实例变量,即self.server被设置为应用程序。这意味着我不能使用装饰器,因为self在装饰方法之外是未定义的。我希望能够执行以下操作:classMyClass:def__init__(self):self.server=Flask(__name__)@self.server.route('/')defhome():return'Success'是否有解决此问题的方法?非常感谢任何帮助! 最佳答案

python 单元测试: can't call decorated test

我有一个相当大的测试套件,我装饰了一些test_*函数。现在我不能通过./test.pyMySqlTestCase.test_foo_double给他们打电话了,python3.2提示:ValueError:nosuchtestmethodin:result.我的装饰器代码如下所示:defprocedure_test(procedure_name,arguments_count,returns):'''Decoratorforproceduretests,thatsimplifiestestingwhetherprocedurewithgivennameisavailable,whet

python - 如何使用 joblib.Memory 缓存 Python 类的成员函数的输出

我想使用joblib.Memory库缓存一个类的成员函数的输出。这是一个示例代码:importjoblibimportnumpyasnpmem=joblib.Memory(cachedir='/tmp',verbose=1)@mem.cachedefmy_sum(x):returnnp.sum(x)classTestClass(object):def__init__(self):pass@mem.cachedefmy_sum(self,x):returnnp.sum(x)if__name__=='__main__':x=np.array([1,2,3,4])a=TestClass()p

python装饰函数调用

是否可以使用python装饰器包装函数调用?我不想为模块的每个功能单独实现包装器。我想要一个类似的东西defa(num):returnnum@double_the_valuea(2)返回4而无需访问a的实现。全局包装器会像defmultiply(factor,function,*args,**kwargs):returnfactor*function(*args,**kwargs)在这种情况下是更好的选择吗? 最佳答案 虽然@decorator语法只能与函数或类的定义结合使用,但装饰器成为语言功能之前的语法可以满足您的要求:from

python - 使用来自不同模块的 python 装饰器函数

我想使用来自另一个模块的函数作为装饰器,但我需要它来操作当前模块的全局命名空间。例如,我希望能够从这里开始:classSomeClass:passroot=SomeClass为此:fromothermoduleimportdecorator@decoratorclassSomeclass:pass有什么想法吗? 最佳答案 这已经有效了:fromothermoduleimportdecorator@decoratorclassSomeclass:pass只需放入othermodule.py:defdecorator(cls):#...

python - 如何使用将名称列表作为参数的装饰器向类添加属性?

我想通过装饰器向类添加许多虚拟属性,如下所示:defaddAttrs(attr_names):defdeco(cls):forattr_nameinattr_names:defgetAttr(self):returngetattr(self,"_"+attr_name)defsetAttr(self,value):setattr(self,"_"+attr_name,value)prop=property(getAttr,setAttr)setattr(cls,attr_name,prop)setattr(cls,"_"+attr_name,None)#Defaultvaluefort

python - 在 Python 中使用 Loops 修饰多个导入函数

我是Python和装饰器的新手,如果这似乎是一个微不足道的问题,我深表歉意。我正在尝试使用Python中的循环将装饰器应用于多个导入的函数,如下所示fromrandomimportrandom,randint,choicedefour_decorator(func):deffunction_wrapper(*args,**kwargs):print("Beforecalling"+func.__name__)res=func(*args,**kwargs)print(res)print("Aftercalling"+func.__name__)returnfunction_wrappe

Python装饰器记录器

我有以下代码:deflog(func):defwrapper(*args,**kwargs):func_str=func.__name__args_str=','.join(args)kwargs_str=','.join([':'.join([str(j)forjini])foriinkwargs.iteritems()])withopen('log.txt','w')asf:f.write(func_str)f.write(args_str)f.write(kwargs_str)returnfunc(*args,**kwargs)returnwrapper()@logdefexam