
On Sunday, June 1, 2003, at 12:17 PM, Paul Moore wrote:
Note: I'm *not* a fan of Eiffel-style formal pre and post conditions. I probably wouldn't use them, personally. But as I could end up dealing with others' code which uses such a feature if it was added, I do have an interest. Also, I haven't read the PEP yet (I'm offline right now).
But I disagree fairly strongly with the idea of having pre/post conditions in docstrings. That is *not* what docstrings are for. Docstrings are documentation, not arbitrary metadata.
How about this as a proposal? Attach pre and post conditions to a functions as function attributes. A silly example:
def f(): pass
def pre(): assert True f.pre = pre
def post(): assert True f.post = post
This is a bit wordy, but entirely doable with Python as it stands and the conditions are syntax checked at definition time, just like they should be. If pre/post conditions turn out to be so useful that they deserve a more concise syntax, *that's* the time to propose better syntax. (One obvious possibility would be to allow more flexibility in def statements, so that
def f.post(): whatever
becomes possible.)
Although I haven't played with it much, in the back of my mind, I think descriptors might be the right implementation technique for this. And the syntax that seems to keep coming up is something like: def f(x, y) [pre, post]: foo() For other reasons, I'm finding that I'd really like to see this syntax for function decorators embodied in its own PEP. -Barry