Tag: 装饰

如何创build一个可以使用或不使用参数的Python装饰器?

我想创build一个Python装饰器,可以使用参数: @redirect_output("somewhere.log") def foo(): …. 或者没有它们(例如默认情况下将输出redirect到stderr): @redirect_output def foo(): …. 这是可能的吗? 请注意,我不是在寻找redirect输出问题的另一种解决scheme,它只是我想要达到的语法的一个例子。

在类体内调用类的静态方法?

当我尝试从类的主体中使用静态方法,并使用内置静态方法函数作为装饰器来定义静态方法时,如下所示: 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 = _stat_func() TypeError: 'staticmethod' object is […]

代理和装饰模式之间的区别

你能给一个很好的解释什么是代理和装饰之间的区别? 我看到的主要区别是,当我们假设代理使用组合和装饰使用聚合,那么似乎很清楚,通过使用多个(一个或多个) 装饰可以修改/添加function到预先存在的实例(装饰),而代理有自己的代理类的内部实例,并委托给它添加一些额外的function(代理行为)。 问题是 – 使用聚合创build的代理是代理还是装饰器 ? 是否允许(按照GoF模式定义)使用聚合创build代理 ?

一个实例方法的Python装饰器可以访问类吗?

嗨,我有一些大致如下。 基本上我需要从其定义中的实例方法使用的装饰器中访问实例方法的类。 def decorator(view): # do something that requires view's class print view.im_class return view class ModelA(object): @decorator def a_method(self): # do some stuff pass 代码是这样的 AttributeError: 'function' object has no attribute 'im_class' 我发现类似的问题/答案 – Python装饰器让函数忘记它属于一个类,并在Python装饰器中的类 – 但这些依靠一个解决方法抓取第一个参数在运行时抓取实例。 就我而言,我会根据从class上收集的信息来调用这个方法,所以我不能等待电话进来。 谢谢。

类中的Python装饰器

可以这样写: class Test(object): def _decorator(self, foo): foo() @self._decorator def bar(self): pass 这失败了:@self中的self是未知的 我也试过: @Test._decorator(self) 这也失败了:testing未知 如果想温度。 修改装饰器中的一些实例variables,然后运行修饰的方法,然后再更改它们。 谢谢。

Ruby on Rails模式 – 装饰者vs主持人

最近在Ruby on Rails社区里有关于装饰器和演示者的各种讨论。 两者之间的本质区别是什么? 如果有的话,有哪些线索告诉我哪一个用于另一个? 或者也许使用这两个结合?

用一个真实世界的例子来理解“装饰模式”

我正在研究GOF中logging的装饰者模式 。 请帮我理解装饰模式 。 有人可以给出一个在现实世界中有用的用例吗?

Python装饰器的一些常见用途是什么?

虽然我喜欢把自己看作是一个合理的Python编码器,但是我从来没有想到的语言的一个方面是装饰器。 我知道他们是什么(表面上),我读过教程,例子,关于堆栈溢出的问题,并且我理解语法,可以写我自己的,偶尔使用@classmethod和@staticmethod,但是从来没有发生过使用装饰者来解决我自己的Python代码中的一个问题。 我从来没有遇到过这样的问题:“呃…这看起来像是一个装饰工的工作!” 所以,我想知道你们是否可以提供一些你在自己的程序中使用过装饰器的例子,希望我会有一个“A-ha”! 一瞬间,并得到他们。

代理,装饰器,适配器和桥接模式如何不同?

我正在寻找代理模式,对我来说,它似乎非常像装饰器,适配器和桥模式。 我误解了什么? 有什么不同? 为什么我会使用代理模式与其他模式? 你过去在现实世界的项目中如何使用它们?

为什么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() >>> tx tx called getter Traceback (most recent call last): File "<stdin>", line […]