On Mon, Aug 27, 2018 at 10:50 PM, Steven D'Aprano <st...@pearwood.info> wrote: > On Mon, Aug 27, 2018 at 12:12:22PM +0100, Ivan Levkivskyi wrote: >> Contract in 99% of cases is just another word for type (maybe a very >> complex type like `DAG[T] <: Graph[T]`). >> Everything else, like `x >= y` is better expressed as an explicit assert >> with an assert message. > > Contracts ARE assertions. They are assertions about the input a method > expects, not merely the type but the value, what result it intends to > return, and the invariants of the class after the method is called. Like > assertions, they are called at runtime, and can be disabled.
Sometimes "type" doesn't mean the same thing to the language and to the human. Suppose you're trying to create a Python script that replicates a C program; you might want to declare that a variable is not of type "integer" but type "32-bit unsigned integer", with wrap-around. Or, wording it another way: "integer modulo 2**32". Is that an assertion of type, or of type and value? As a precondition to a function, requiring that a parameter be an integer no less than zero and no greater than 4294967295 is, in a sense, checking its type and its value; but it's kinda just asserting its type. AIUI, that's what Ivan meant by "complex type" - something that determines the domain of valid values as well as the concrete type. ChrisA _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/