通过装饰器重新定义或添加方法。可能?

时间:2011-07-14 19:54:04

标签: python decorator

我上课了:

@custom_decorator
class Creature(objects):

    def __init__(self):
        pass

    def rise_hands(self, *args, **kwargs):
        print 'hands rised'

我想在此类Creature的顶部定义自定义装饰器,以便重新定义方法rise_hands或添加新方法。

顺便说一下:如何重新定义argskwargs的值?

更新

gola如下: 我想用装饰器为django模型实现一个应用程序。无论我在模型上定义什么,它都会通过保存旧值和新值来记录更改...

2 个答案:

答案 0 :(得分:1)

别。做。这个。

你有继承来做你正在谈论的事情。

class FancyCreature( Creature ):

    def __init__(self):
        super( FancyCreature, self ).__init___()

    def rise_hands(self, *args, **kwargs):
        print 'hands rised'
        super( FancyCreature, self ).rise_hands( *args, **kwargs )

    def new_method( self ):
        print "new method"

这是“重新定义方法rise_hands或添加新方法”

的方式

答案 1 :(得分:0)

以下是如何修改kwargs和args中的参数。我原则上认为这没有任何错误

>>> def go(func,*args,**kwargs):
...     def g(*args,**kwargs):
...             func(args+(1,),kwargs)
...     return g
... 

>>> @go
... def rise_hands(*args, **kwargs):
...     print args
... 
>>> rise_hands(1)
((1, 1), {})