擅长:python、mysql、java
<p>如果您坚持在装饰方法的主体开始之前检查,以下是一种合理的方法…:</p>
<pre><code>import functools
class test(object):
def __init__(self, requiredvars):
self.reqs = requiredvars.split()
def __call__(self, f):
@functools.wraps(f)
def wrapper(wself, *a, **k):
missing = set()
for v in self.reqs:
if not hasattr(wself, v):
missing.add(v)
if missing:
msg = 'missing fields: %s' % ','.join(sorted(missing))
raise valueerror, msg
return f(wself, *a, **k)
return wrapper
class data(object):
def __init__(self, a, b):
self.a = a
@test('a b')
def sum(self):
return self.a + self.b
d = data(23, 42)
d.sum()
</code></pre>
<p>正如你所希望的那样</p>
^{pr2}$