Unsupported Python Features

Jukka Lehtosalo edited this page May 29, 2018 · 6 revisions

Some Python features are not currently supported by mypy.

It should be relatively easy to add support for these features:

  • Double underscore name mangling in classes (you can use double underscores but the names are not treated as special)

The features in the list below are more difficult to support. Many of these could be supported, at least in a restricted form, but some will likely remain unsupported.

  • Metaclasses

    • Mypy understands simple metaclasses, i.e. it performs attribute and method lookup
    • We could have plugin mechanism that would allow mypy to understand specific metaclasses
  • Runtime mutation of classes and modules (runtime definition of new methods/functions, etc.)

  • __all__ with complex initializer / mutated value

  • Class decorators that modify a class

    • Similar to metaclasses
  • Run-time evaluated base class, for example:

    class A(foo()): pass
  • eval and exec (these can be used but they are opaque to the type checker)

  • Run-time addition/mutation of base classes (e.g. registering ABCs)

  • Conditional definition of classes (e.g. within if statement)

  • Certain idioms involving conditional imports

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.