Questions tagged «python-decorators»

在Python中,装饰器是可以使用特殊语法方便地更改函数,方法或类的函数。装饰器动态更改功能,而无需更改要装饰的源代码。


17
如何制作功能装饰器链?
如何在Python中制作两个装饰器,以完成以下工作? @makebold @makeitalic def say(): return "Hello" ...应返回: "<b><i>Hello</i></b>" 我并不是想HTML在实际的应用程序中采用这种方式-只是想了解装饰器和装饰器链接的工作方式。

14
@property装饰器如何工作?
我想了解内置函数的property工作原理。令我感到困惑的是,property它还可以用作装饰器,但是仅当用作内置函数时才接受参数,而不能用作装饰器。 这个例子来自文档: class C(object): def __init__(self): self._x = None def getx(self): return self._x def setx(self, value): self._x = value def delx(self): del self._x x = property(getx, setx, delx, "I'm the 'x' property.") property的论点是getx,setx,delx和文档字符串。 在下面的代码中property用作装饰器。它的对象是x函数,但是在上面的代码中,参数中没有对象函数的位置。 class C(object): def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x …



5
具有自变量的类方法修饰器?
如何将类字段作为参数传递给类方法的装饰器?我想做的是这样的: class Client(object): def __init__(self, url): self.url = url @check_authorization("some_attr", self.url) def get(self): do_work() 它抱怨自己不存在传递self.url给装饰器。有没有解决的办法?

10
关于如何在python中使用属性功能的真实示例?
我对如何@property在Python中使用感兴趣。我阅读了python文档,并认为其中的示例只是一个玩具代码: class C(object): def __init__(self): self._x = None @property def x(self): """I'm the 'x' property.""" return self._x @x.setter def x(self, value): self._x = value @x.deleter def x(self): del self._x 我不知道通过包装_x用属性装饰器填充的内容可以获得什么好处。为什么不只是实现为: class C(object): def __init__(self): self.x = None 我认为,属性功能在某些情况下可能很有用。但当?有人可以给我一些真实的例子吗? 谢谢。

1
装饰器执行顺序
def make_bold(fn): return lambda : "<b>" + fn() + "</b>" def make_italic(fn): return lambda : "<i>" + fn() + "</i>" @make_bold @make_italic def hello(): return "hello world" helloHTML = hello() 输出: "<b><i>hello world</i></b>" 在大多数示例中,我大致了解装饰器以及它如何与其中之一一起工作。 在此示例中,有2个。从输出看,似乎@make_italic先执行,然后执行@make_bold。 这是否意味着对于装饰功能,它将首先运行该功能,然后移至其他装饰器的顶部?像@make_italic先那么@make_bold,而不是相反。 所以这意味着它与大多数编程语言中的自顶向下方法的规范不同吗?仅用于这种装饰器吗?还是我错了?

5
如何将额外的参数传递给Python装饰器?
我有一个如下的装饰器。 def myDecorator(test_func): return callSomeWrapper(test_func) def callSomeWrapper(test_func): return test_func @myDecorator def someFunc(): print 'hello' 我想增强此装饰器以接受如下另一个参数 def myDecorator(test_func,logIt): if logIt: print "Calling Function: " + test_func.__name__ return callSomeWrapper(test_func) @myDecorator(False) def someFunc(): print 'Hello' 但是这段代码给出了错误, TypeError:myDecorator()恰好接受2个参数(给定1个) 为什么不能自动传递函数?如何将函数显式传递给装饰器函数?

5
如何使用Decorator绕过python函数定义?
我想知道是否有可能基于全局设置(例如OS)控制Python函数定义。例: @linux def my_callback(*args, **kwargs): print("Doing something @ Linux") return @windows def my_callback(*args, **kwargs): print("Doing something @ Windows") return 然后,如果有人使用Linux,则将使用第一个定义,my_callback而第二个定义将被忽略。 它与确定操作系统无关,而与功能定义/修饰符有关。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.