[Python-ideas] Pre-conditions and post-conditions
Brice Parent
contact at brice.xyz
Wed Aug 29 02:48:26 EDT 2018
I've never used contracts, so excuse me if I didn't get how they would
work, and what they should do.
The last example is about pre-post conditions in a class constructor.
But I imagine this is not the only case where one would want to define
contracts, like probably: within methods that return something and to
functions (and in both cases, we'd want to contractually state some of
the return's specificities).
Is the following function something someone used to work with contracts
would write?
def calculate(first: int, second: int) -> float:
def __require__():
first > second
second > 0
# or first > second > 0 ?
def __ensure__(ret): # we automatically pass the return of the
function to this one
ret > 1
return first / second
If so, having a reference to the function's output would probably be
needed, as in the example above.
Also, wouldn't someone who use contracts want the type hints he provided
to be ensured without having to add requirements like `type(first) is
int` or something?
- Brice
Le 29/08/2018 à 07:52, Greg Ewing a écrit :
> Wes Turner wrote:
>> I'm going to re-write that in a pseudo-Eiffel like syntax:
>
> Maybe some magic could be done to make this work:
>
> def __init__(self, img: np.ndarray, x: int, y: int, width: int,
> height: int) -> None:
>
> def __require__():
> x >= 0
> y >= 0
> width >= 0
> height >= 0
> x + width <= pqry.opencv.width_of(img)
> y + height <= pqry.opencv.height_of(img)
>
> def __ensure__():
> (self.x, self.y) in self
> (self.x + self.width - 1, self.y + self.height - 1) in self
> (self.x + self.width, self.y + self.height) not in self
>
> # body of __init__ goes here...
>
More information about the Python-ideas
mailing list