Skip to content

Unsupported Python Features

Elazar Gershuni edited this page Feb 15, 2017 · 8 revisions

Some Python features are not currently supported by mypy.

It should be relatively easy to add support for these features (and all of these will likely be supported in the future):

  • Properties with setters (currently partial support)
  • Descriptors
  • __setattr__
  • __all__ with imports if the value can be evaluated during compilation (e.g. ['x', 'y', ...])
  • 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