
On Mon, Jan 25, 2016 at 05:24:29PM -0800, David Mertz wrote:
Just curious, Michael, what would you like the Python syntax version to look like if you *can* do whatever metaclass or stack hackery that's needed? I'm a little confused when you mention a decorator and a context manager in the same sentence since those would seem like different approaches. E.g.:
I'm not Michael, but since I started this discussion, I'll give an answer. I haven't got any working code, but I think something like this would be acceptable as a proof-of-concept. I'd use a class as a fake namespace, with either a decorator or metaclass: class myfunction(metaclass=DBC): def myfunction(args): # function implementation ... def requires(): ... def ensures(): ... The duplication of the name is a bit ugly, and it looks a bit funny for the decorator/metaclass to take a class as input and return a function, but we don't really have anything else that makes a good namespace. There's functions themselves, of course, but it's hard to get at the internals. The point is to avoid having to pre-define the pre- and post-condition functions. We don't write this: def __init__(self): ... def method(self, arg): ... class MyClass(init=__init__, method=method) and nor should we have to do the same for require/ensure. -- Steve