def example_func(x, y):<div>    def __assert_before__(example_func):</div><div>        #implicit, AST-able assertion expressions</div><div><br></div><div>    # ... code</div><div><br></div><div>    def __assert_after__(example_func):</div><div>        #</div><div>    </div><div>    def __assert_after__invariants_02(example_func):</div><div>        # "</div><div><br></div><div>But these need to be composed / mixed in in MRO order and overridable; more like a class with a __call__() and metaclassery for source-order composition that has to do substring matches for e.g. __assert__*.</div><div><br></div><div>Blocks of expressions identified with keywords wouldn't be overrideable ('relaxed',); and would need to do fancy AST that replicates existing MRO?</div><div><br>On Thursday, August 30, 2018, Ethan Furman <<a href="mailto:ethan@stoneleaf.us">ethan@stoneleaf.us</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 08/30/2018 01:49 PM, Marko Ristin-Kaufmann wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
classC(A):<br>
     # C.some_func also inherits the contracts from A.<br>
     #   It weakens the precondition:<br>
     #       it operates either on sorted lists OR<br>
     #           the lists that are shorter than 10 elements.<br>
     #<br>
     #  It strenghthens the postcondition:<br>
     #       It needs to return an integer larger than<br>
     #       the length of the input list AND<br>
     #           the result needs to be divisible by 2.<br>
     @icontract.post(lambdaresult: result %2==0)<br>
     defsome_func(self, lst: List[int]) ->int:<br>
         # ...<br>
</blockquote>
<br>
I think you forgot an @icontract.pre() here.<br>
<br>
--<br>
~Ethan~<br>
______________________________<wbr>_________________<br>
Python-ideas mailing list<br>
<a href="mailto:Python-ideas@python.org" target="_blank">Python-ideas@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-ideas" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/python-ideas</a><br>
Code of Conduct: <a href="http://python.org/psf/codeofconduct/" target="_blank">http://python.org/psf/codeofco<wbr>nduct/</a><br>
</blockquote></div>