Questions tagged «decorator»

装饰器是一种面向对象的设计模式,允许以动态方式向现有类添加行为。它是“四人帮”的结构设计模式之一。

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 …

22
在Python中创建单例
这个问题不是为了讨论是否需要单例设计模式,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式。在这种情况下,我将“最pythonic”定义为表示它遵循“最少惊讶的原理”。 我有多个将成为单例的类(我的用例用于记录器,但这并不重要)。当我可以简单地继承或修饰时,我不希望增加gumph来使几个类杂乱无章。 最佳方法: 方法1:装饰器 def singleton(class_): instances = {} def getinstance(*args, **kwargs): if class_ not in instances: instances[class_] = class_(*args, **kwargs) return instances[class_] return getinstance @singleton class MyClass(BaseClass): pass 优点 装饰器的添加方式通常比多重继承更直观。 缺点 使用MyClass()创建的对象将是真正的单例对象,而MyClass本身是一个函数,而不是类,因此您不能从中调用类方法。也就m = MyClass(); n = MyClass(); o = type(n)();这样m == n && m != o && n != …

6
functools.wraps是做什么的?
在对另一个问题的答案发表评论时,有人说他们不确定functools.wraps在做什么。所以,我问这个问题,以便在StackOverflow上有它的记录,以备将来参考:到底是functools.wraps做什么的?


13
带参数的装饰器?
我在装饰器传递变量'insurance_mode'时遇到问题。我可以通过以下装饰器语句来做到这一点: @execute_complete_reservation(True) def test_booking_gta_object(self): self.test_select_gta_object() 但不幸的是,该声明不起作用。也许也许有更好的方法来解决此问题。 def execute_complete_reservation(test_case,insurance_mode): def inner_function(self,*args,**kwargs): self.test_create_qsf_query() test_case(self,*args,**kwargs) self.test_select_room_option() if insurance_mode: self.test_accept_insurance_crosseling() else: self.test_decline_insurance_crosseling() self.test_configure_pax_details() self.test_configure_payer_details return inner_function
401 python  decorator 

13
Python装饰器有哪些常见用途?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 改善这个问题 尽管我喜欢将自己视为一个相当称职的Python编码器,但我从来没有想到过的语言的一方面是装饰器。 我知道它们是什么(表面上),我已经阅读了有关堆栈溢出的教程,示例和问题,而且我了解语法,可以编写自己的语法,偶尔使用@classmethod和@staticmethod,但是使用装饰器来解决我自己的Python代码中的问题。我从来没有遇到过这样的问题,我想:“嗯……这看起来像是装饰工的工作!” 因此,我想知道你们是否可以提供一些示例,说明您在自己的程序中使用装饰器的位置,并希望我会收到“ A-ha!”字样。片刻,让他们。
336 python  decorator 

28
TypeScript编译中的实验装饰器警告
我收到警告... 对装饰器的实验支持是一项功能,将来的版本中可能会对其进行更改。设置'experimentalDecorators'选项`以消除此警告。 ...即使我的tsconfig.json中的editorOptions具有以下设置: "emitDecoratorMetadata": true, "experimentalDecorators": true, 奇怪的是,某些使用装饰器的随机类没有显示该警告,而同一项目中的其余类却显示了该警告。 是什么导致TypeScript编译器中的此类行为?

15
如何获取方法参数名称?
鉴于Python函数: def a_method(arg1, arg2): pass 如何提取参数的数量和名称。即,鉴于我有提及func,因此我希望func.[something]返回("arg1", "arg2")。 这样做的使用场景是我有一个装饰器,并且我希望以与实际函数作为键一样的顺序使用方法参数。即,"a,b"我致电时装饰工的外观如何a_method("a", "b")?

2
Redux @connect装饰器中的“ @”(符号处)是什么?
我正在用React学习Redux,偶然发现了这段代码。我不确定它是否特定于Redux,但在其中一个示例中我看到了以下代码片段。 @connect((state) => { return { key: state.a.b }; }) 虽然的功能connect非常简单明了,但是我@以前并不了解connect。如果我没有记错的话,它甚至都不是JavaScript运算符。 有人可以解释一下这是什么,为什么使用它? 更新: 实际上,react-redux它的一部分用于将React组件连接到Redux存储。

3
如何实现打字稿装饰器?
TypeScript 1.5现在具有装饰器。 有人可以提供一个简单的示例,演示实现装饰器的正确方法并描述可能的有效装饰器签名中的参数是什么意思吗? declare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void; declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void; declare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void; declare type ParameterDecorator = (target: Function, propertyKey: …


5
在类主体中调用类staticmethod?
当我尝试从类的主体中使用静态方法,并使用内置staticmethod函数作为装饰器来定义静态方法时,如下所示: class Klass(object): @staticmethod # use as decorator def _stat_func(): return 42 _ANS = _stat_func() # call the staticmethod def method(self): ret = Klass._stat_func() + Klass._ANS return ret 我收到以下错误: Traceback (most recent call last):<br> File "call_staticmethod.py", line 1, in <module> class Klass(object): File "call_staticmethod.py", line 7, in Klass _ANS = …


4
为什么Python中的@ foo.setter对我不起作用?
因此,我正在使用Python 2.6中的装饰器,并且在使它们工作时遇到了一些麻烦。这是我的课程文件: class testDec: @property def x(self): print 'called getter' return self._x @x.setter def x(self, value): print 'called setter' self._x = value 我认为这意味着将其视为x属性,但是在get和set上调用这些函数。因此,我启动了IDLE并检查了它: >>> from testDec import testDec from testDec import testDec >>> t = testDec() t = testDec() >>> t.x t.x called getter Traceback (most recent call last): File …

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.