繁体   English   中英

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

[英]Redefine or add Methods to class through decorator. Possible?

我有 class:

@custom_decorator
class Creature(objects):

    def __init__(self):
        pass

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

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

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

更新:

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

不。 做。 这个。

你有 inheritance 来做你所说的。

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或添加新方法”的方式

这是在 kwargs 和 args 中修改 arguments 的方法。 原则上我认为这样做没有任何问题

>>> 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), {})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM