我可以在python中使用装饰器包装一个完整的类吗?

时间:2014-09-17 23:45:01

标签: python wrapper

我有一个包含许多参数的复杂函数。我有想法使用类,模块,函数等,我在其中定义参数,以及我将传递给大函数的过程。

我写了这个实际有用的代码。但我不知道这样做是否“合法”。

from functools import wraps

def myfunc (value) :
    print 'myfunc' , value

def somewrapper  (f):
    @wraps(f)
    def decorated_class () :
        print "inside wrapper"
        print hasattr(f,'foomember')
        return myfunc ('wrapped')
    return decorated_class

@somewrapper
class mymodelclass :
    some = 'value'
    def foomember () :
        return 'inside class'

mymodelclass()

1 个答案:

答案 0 :(得分:2)

是的,支持类装饰器,并且在Python中使用完全有效。该功能是通过PEP 3129在Python 2.6中引入的。因此,以下两段代码是相同的:

class A:
  pass
A = foo(bar(A))


@foo
@bar
class A:
  pass

您提供的代码示例对我来说并没有多大意义,因为您已经用一个在执行时没有返回任何内容的函数对象替换mymodelclass,但看起来这只是一个你用来展示这个想法的玩具示例。