aSanchezStern 11 hours ago

The thing that the author says they would prefer is already in Python, it's called NewType (https://docs.python.org/3/library/typing.html#typing.NewType)

They say "...so I can't create a bunch of different names for eg typing.Any and then expect type checkers to complain if I mix them."

`MyType = NewType('MyType', Any)`

is how you do this.

At the end, they suggest a workflow: "I think my ideal type hint situation would be if I could create distinct but otherwise unconstrained types for things like function arguments and function returns, have mypy or other typing tools complain when I mixed them, and then later go back to fill in the concrete implementation details of each type hint"

That's just doing the above, but then changing the `NewType('MyType', Any)` to something like `NewType('MyType', list[dict[str, int]])` later when you want to fill in the concrete implementation.

2
stavros 8 hours ago

This is great, thank you for this. I've always wanted something that would complain if I passed Meters to something expecting Feet, but aliases didn't consider this an error.

cmcconomy 8 hours ago

You should look into the pint library if you want full unit support!

stavros 8 hours ago

That looks really useful, thank you! I don't always specifically want units, but it'll be great for when I do!

Der_Einzige 6 hours ago

Why is it that many of the examples for the "typing.protocal" class right below this involve meth??? Python WTF?

Hackbraten 1 hour ago

`meth` is just a historical abbreviation.

Mind that support for methods as first-class objects was introduced with Python 2.5 [0].

That was in 2006, a few years before "meth" became engrained in European popular culture as an abbreviation for methamphetamines. The abbreviation was never changed.

[0]: https://docs.python.org/release/2.5/lib/typesmethods.html

kstrauser 1 hour ago

It’s a high level language.

rnewme 6 hours ago

method? Or are you being sarcastic?