我上课了:
@custom_decorator
class Creature(objects):
def __init__(self):
pass
def rise_hands(self, *args, **kwargs):
print 'hands rised'
我想在此类Creature的顶部定义自定义装饰器,以便重新定义方法rise_hands
或添加新方法。
顺便说一下:如何重新定义args
或kwargs
的值?
更新
gola如下: 我想用装饰器为django模型实现一个应用程序。无论我在模型上定义什么,它都会通过保存旧值和新值来记录更改...
答案 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), {})