Home

Awesome

Python name2type mapping

In October 2018 on the mailing list python-ideas some developers encouraged me, that the idea of a name2type mapping would be usefull.

Goal

Source code should be clean. Every character which is not needed for my eyes/brain to understand the code should not be on the screen.

Imagine you work on a Django project. Many methods will have the request as first argument. Every django develop knows that I mean django.http.HttpRequest.

So if my eyes and brain just need the string request to understand what this variable is, then there should be a way for the interpreter/compiler to understand this, too.

Since interpreter/compilers are not smart, we need a way to make them understand this "name to type mapping".

Syntax Proposal

The name2type mapping is defined in the docstring of a Python file.

The general syntax is "name2type:" followed by a comma sperated list of variable names. Then ":", then the type hint.

Examples:

name2type: my_int, my_number, ....: int
name2type: request*: django.http.HttpRequest

If the docstring is in a file called __init__.py, then the type hints get specified for all files below this directory (recursively).

Use Case Example

Your code base contains a variable name "request" 100 times, and in 70 times the variable type is an instance of "django.http.HttpRequest" (detected by usual type annotations). If you want to have valid type information of all occurences of "request" in your code, then you need to find a solution for 30 usages. You could annotate the variable in your code 30 times (once per method). Or you could define a name2type mapping in the __init__.py file if your code.

Misc

Arguments against name2type mapping

Above argument makes me unsure what the best solution looks like. Do an explicit name2type mapping, or leave it up to the stats. There are conflicting guidelines. The guidelines "less is more" and "avoid redundancy" on one side, and on the other side "explicit is better than implicit".

Open questions