python / mypy

Optional static typing for Python
https://www.mypy-lang.org/
Other
18.26k stars 2.79k forks source link

Refactor operator method access and protocol checks to use checkmember.py #5136

Open ilevkivskyi opened 6 years ago

ilevkivskyi commented 6 years ago

Currently code that checks access to dunder operator methods duplicates code in checkmember.py. Apart from code duplication, the code for operators is more simplistic and doesn't cover some corner cases. A similar situation is with accessing attributes for protocol checks.

The common pattern in both cases is that we need almost the same logic as in checkmember.py, but with some steps skipped and error reporting suppressed.

JukkaL commented 6 years ago

One concrete difference is that operator methods on type objects (as opposed to instances) have different semantics -- they can't generally be defined as class/static methods (and there's __class_getitem__ in Python 3.7).

Michael0x2a commented 6 years ago

Just to add some extra details/clues: I tried removing that call in my recent operators refactor, and it ended up breaking the pythoneval.testMetaclassOpAccessAny test case to fail -- I added a TODO about this to the relevant section of the code.