
On Fri, Nov 26, 2021 at 1:37 AM Paul Moore <p.f.moore@gmail.com> wrote:
The issue is that, intended or not, typing is making it's way into Python culture. As an instructor of beginning python users, I am unsure at
On Thu, 25 Nov 2021 at 21:45, Christopher Barker <pythonchb@gmail.com> wrote: this point when to introduce type annotations.
What is their role? Up to today, I have treated them as an advanced
feature, useful for "complex codebases". But there are any number of examples springing up on the internet, to the point where many students now think they are "best practice", if not actually required.
Agreed this is somewhat OT, but I also think the messaging around annotations needs to be reviewed. I suspect that students will also not clearly understand the fact that annotations aren't checked at runtime. And IMO this is particularly difficult to get across in the case of non-typechecker uses of annotations.
The following, for example, is extremely non-intuitive to me:
from dataclasses import dataclass
@dataclass ... class A: ... n: int ... a = A("didn't expect this!") a A(n="didn't expect this!")
Even though the "typing is optional" message is well-understood, my instincts still lead me to expect that declaring the type of n will result in a runtime type-check, in the constructor at least. (If I check the code with mypy, it does raise an error, so that's good. Although the more I think about it, given that I believe dataclasses use eval "under the hood", the less I understand *how* it manages to do that without special-case knowledge of the dataclass decorator...)
Static checkers special-case the @dataclass decorator. Eric Traut has a proposal to generalize this support (sorry, I'm in a rush, otherwise I'd dig up the link, but it's in the typing-sig archives).
I'd like to see a clearer statement from "somewhere" about how APIs should use annotations at runtime, such that Python users have a much clearer intuition about APIs like the dataclass one, and library designers can build their APIs based on a clear "common understanding" of what to expect when annotations are used.
Note that @dataclass itself is very careful not to use the annotations, it only looks for their *presence*. With one exception for ClassVar. -- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-c...>