I didn’t really pay as much attention to Python 3’s development as I would have liked, and only just noticed some interesting new syntax changes. Specifically from this SO answer function parameter annotation:
def digits(x:'nonnegative number') -> "yields number's digits":
# ...
Not knowing anything about this, I thought it could maybe be used for implementing static typing in Python!
After some searching, there seemed to be a lot discussion regarding (entirely optional) static typing in Python, such as that mentioned in PEP 3107, and “Adding Optional Static Typing to Python” (and part 2)
..but, I’m not clear how far this has progressed. Are there any implementations of static typing, using the parameter-annotation? Did any of the parameterised-type ideas make it into Python 3?
Thanks for reading my code!
Indeed, it’s not hard to create a generic annotation enforcer in Python. Here’s my take:
Given this simplicity, it’s strange at the first sight that this thing is not mainstream. However, I believe there are good reasons why it’s not as useful as it might seem. Generally, type checking helps because if you add integer and dictionary, chances are you made some obvious mistake (and if you meant something reasonable, it’s still better to be explicit than implicit).
But in real life you often mix quantities of the same computer type as seen by compiler but clearly different human type, for example the following snippet contains an obvious mistake:
Any human should immediately see a mistake in the above line provided it knows the ‘human type’ of variables
heightandlengtheven though it looks to computer as perfectly legal multiplication ofintandfloat.There’s more that can be said about possible solutions to this problem, but enforcing ‘computer types’ is apparently a half-solution, so, at least in my opinion, it’s worse than no solution at all. It’s the same reason why Systems Hungarian is a terrible idea while Apps Hungarian is a great one. There’s more at the very informative post of Joel Spolsky.
Now if somebody was to implement some kind of Pythonic third-party library that would automatically assign to real-world data its human type and then took care to transform that type like
width * height -> areaand enforce that check with function annotations, I think that would be a type checking people could really use!