擅长:python、mysql、java
<p>你发现的PEP还没有被接受,所以没有一个标准或者被接受的方法来实现它(但是——你可以自己实现它!)。然而,正如您所发现的,有几种不同的方法。</p>
<p>可能最轻量级的方法就是简单地使用Python装饰器。在<a href="http://wiki.python.org/moin/PythonDecoratorLibrary#Pre-.2BAC8-Post-Conditions">Python Decorator Library</a>中有一组用于前/后条件的装饰器,可以直接使用。下面是该页的一个示例:</p>
<pre><code> >>> def in_ge20(inval):
... assert inval >= 20, 'Input value < 20'
...
>>> def out_lt30(retval, inval):
... assert retval < 30, 'Return value >= 30'
...
>>> @precondition(in_ge20)
... @postcondition(out_lt30)
... def inc(value):
... return value + 1
...
>>> inc(5)
Traceback (most recent call last):
...
AssertionError: Input value < 20
</code></pre>
<p>现在,你提到类不变量。这有点困难,但我要做的是定义一个检查不变量的调用,然后在每个方法调用结束时让post condition decorator检查该不变量。作为第一个切入点,您可能只需要使用postcondition decorator就可以了。</p>