次のように、クラスのメンバー関数によって返される値に @postcondition デコレータを使用しようとしています。
def out_gt0(retval, inval):
assert retval > 0, "Return value < 0"
class foo(object):
def __init__(self, w, h):
self.width = w
self.height = h
@postcondition(out_gt0)
def bar(self):
return -1
メンバー関数 'bar' を呼び出そうとすると (そして、@postcondition を呼び出して警告を表示させます)、次のようになります。
>>> f = foo(2,3)
>>> f.bar()
Traceback (most recent call last):
File "<pyshell#22>", line 1, in <module>
f.bar()
File "<pyshell#8>", line 106, in __call__
result = self._func(*args, **kwargs)
TypeError: bar() takes exactly 1 argument (0 given)
>>>
@postcondition の私の定義は、ここで見られるものhttp://wiki.python.org/moin/PythonDecoratorLibrary#Pre-.2FPost-Conditionsです。
@postcondition の根底にある関数がメンバー関数を処理することを期待していないためにエラーが発生したと思います(確かに、これまでに見たすべての例は単純な古い関数を使用しているだけです)が、修正方法がわからないので、これを行うことができますか?
アドバイスをいただければ幸いです。