擅长:python、mysql、java
<p>实际上,把它们放在一个类中应该没有问题。在类主体内部时,您可以通过简单地命名到目前为止定义的任何变量:</p>
<pre>
class A(object):
a = 1
b = 2
c = a + b
print A.c
</pre>
<p>这将产生结果3,因为当Python执行一个类主体时,函数可以“看到”已声明的变量a和b。因此,以下方法同样有效:</p>
^{pr2}$
<p>那么,你的合并职能呢?问题是包装器函数在类体完成执行后长时间运行,并且它定义的变量不再在封闭范围内。那你怎么能提到他们呢?用类名作为前缀!像这样:</p>
<pre>
class C(object):
@staticmethod
def wrap1(*args, **kw):
...
@staticmethod
def wrap2(*args, **kw):
...
@staticmethod
def wrap3(*args, **kw):
...
@staticmethod
def merger(*args, **kw):
C.wrap1(C.wrap2(C.wrap3(...)))
@merger
def plain(...):
...
</pre>
<p>所以Python的一般规则是:在类主体级别运行的代码可以讨论到目前为止在它内部定义的所有变量和方法,这意味着您可以使用这些类变量作为包装器。但是一旦你进入了类中的一个函数,不管它是类函数、静态函数还是方法(这个包装器是一个类方法,因为它接受参数,但没有“self”),那么你就必须使用类的名称来“获取”它的内容。在</p>