草庐IT

装饰者

全部标签

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

python - 检查函数是否被调用为装饰器

在下面的最小示例中,decorate被调用了两次。首先使用@decorate,然后通过普通函数调用decorate(bar)。defdecorate(func):print(func.__name__)returnfunc@decoratedefbar():passdecorate(bar)如果调用是通过使用@decorate或作为普通函数调用调用的,是否可以看到decorate的内部? 最佳答案 @decorator语法只是语法糖,因此两个示例具有相同的行为。这也意味着您对它们所做的任何区分可能都没有您想象的那么有意义。尽管如此,

python - 使用装饰器动态地向类添加方法

我会动态地向类添加方法...函数名称也将动态传递。我该怎么办?我这样试过defdecor(*var):defonDecorator(aClass):classonInstance:def__init__(self,*args,**kargs):setter=varaClass.setter=self.flamself.wrapped=aClass(*args,**kargs)def__getattr__(self,attr):returngetattr(self.wrapped,attr)def__setattr__(self,attr,value):ifattr=='wrapped'

python - 如何在不显式导入的情况下使新装饰器在类中可用?

是否可以修改一个类,使某个方法装饰器可用,而不必显式导入它,也不必为其添加前缀(@something.some_decorator):classSomeClass:@some_decoratordefsome_method(self):pass我认为类装饰器不可能做到这一点,因为应用得太晚了。看起来更有希望的选项是使用元类,但我不确定如何,我的猜测是我必须将some_decorator引入到SomeClass的命名空间中。感谢@MartijnPieters指出staticmethod和classmethod是内置的。我原以为它们会成为type机器的一部分。明确地说,我没有任何明确的用例

flask 中的 python 装饰器

这是我的例子:fromflaskimportFlaskapp=Flask(__name__)defadd1(f):definner(*args,**kwargs):returnstr(f(*args,**kwargs))+'1'returninner@app.route('/')@add1defhello1():return"hello1";@app.route('/hello2')@add1defhello2():return"hello2";if(__name__=='__main__'):app.run()当我运行127.0.0.1:5000时,我希望得到“hello11​​”,

python - Django - 如何在基于类的 View 方法中使用装饰器?

我正在用django1.8开发一个网站。这是其中一个View的示例:classProfileView(View):template_name='index.html'#Returnprofileofanyrole(client/employee/admin)#Loginrequireddefget(self,request,*args,**kwargs):try:profile=Profile.objects.get(user=request.user)agency=Noneifrequest.user.is_employee():employee=EmployeeProfile.ob

python - 超出最大递归深度,但仅在使用装饰器时

我正在编写一个程序来计算Python中的Levenshtein距离。我实现了记忆化,因为我递归地运行算法。我的原始函数在函数本身中实现了内存。这是它的样子:#MemoizationtablemappingfromatupleoftwostringstotheirLevenshteindistancedp={}#Levenshteindistancealgorithmdeflev(s,t):#Ifthestringsare0,returnlengthofotherifnots:returnlen(t)ifnott:returnlen(s)#Ifthelasttwocharactersar

python - 这些类型的 python 装饰器是如何编写的?

我想写一个装饰器来限制函数的执行次数,语法如下:@max_execs(5)defmy_method(*a,**k):#dosomethingherepass我认为可以编写这种类型的装饰器,但我不知道如何编写。我认为函数不会是这个装饰器的第一个参数,对吧?我想要一个“普通装饰器”实现,而不是一些带有call方法的类。这样做的原因是要了解它们是如何编写的。请解释语法以及装饰器的工作原理。 最佳答案 这是我想出来的。它不使用类,但使用函数属性:defmax_execs(n=5):defdecorator(fn):fn.max=nfn.ca

python - 修改冷却装饰器以用于方法而不是函数

我正在尝试创建一个装饰器,该装饰器适用于对它们应用“冷却时间”的方法,这意味着它们不能在特定持续时间内被多次调用。我已经为函数创建了一个:>>>@cooldown(5)...deff():...print('f()wascalled')...>>>f()f()wascalled>>>f()#Nothinghappenswhencalledimmediately>>>f()#Thisis5secondsafterfirstcallf()wascalled但我需要它来支持类的方法而不是普通函数:>>>classTest:...@cooldown(6)...deff(self,arg):..

python - Python 装饰器做什么,它的代码在哪里?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:UnderstandingPythondecoratorsPython装饰器是做什么的?当我向方法添加装饰器时,在哪里可以看到正在运行的代码?例如,当我添加@login_required在方法的顶部,是否有任何代码替换了该行?此行究竟如何检查用户session?