-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Unsupported Python Features
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
andexec
(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