您发现的PEP尚未被接受,所以没有一个标准或接受的方式这样做(但 – 你可以永远实施PEP自己!)。然而,有几种不同的方法,你已经发现。
可能最轻的只是简单地使用Python装饰器。在Python Decorator Library中有一组用于前/后条件的修饰器,这些修饰器非常直接使用。以下是该页面的示例:
>>> 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
现在,你提到类不变式。这些有点困难,但我想要的方式是定义一个可调用来检查不变量,然后有一些像后条件装饰器检查在每个方法调用结束时不变。作为第一个剪切,你可能只是使用后置条件装饰器。