If a return type annotation is omitted, static type checkers will typically infer the return type from the implementation, by evaluating the types of all returned expressions and unioning them together. I need to amend my previous statement though. It appears that mypy doesn't implement this capability currently. I would think that it would be straightforward to implement in mypy. ```python from typing import Any class Foo: def parse(self, data: bytes): return self @classmethod def bar(cls, *args: Any, **kwargs: Any): return cls() class Bar(Foo): pass x = Bar.bar() reveal_type(x) # Pyright says "Bar", mypy says "Any" y = Bar().parse(b"") reveal_type(y) # Pyright says "Bar", mypy says "Any" ``` -- Eric Traut Contributor to Pyright & Pylance Microsoft Corp