The documentation for typing.Any says Changed in version 3.11: Any can now be used as a base class. This can be useful for avoiding type checker errors with classes that can duck type anywhere or are highly dynamic. What kind of errors is this trying to avoid? At first, I thought the situation in mind was class Foo: def __getattr__(self, attr: str) -> typing.Any: if attr == 'bar': return 5 raise AttributeError(attr) def print_bar(foo: Foo) -> None: print(foo.bar) However, mypy 0.971 with Python 3.10.6 doesn't produce any errors. Continue reading...