diff --git a/mypy/constraints.py b/mypy/constraints.py index 48cc23f74222..ee1db9f8ded2 100644 --- a/mypy/constraints.py +++ b/mypy/constraints.py @@ -1425,6 +1425,8 @@ def visit_type_type(self, template: TypeType) -> list[Constraint]: if isinstance(self.actual, CallableType): if self.actual.is_type_obj(): instance_type = self.actual.get_instance_type() + if is_named_instance(instance_type, "typing.Any"): + instance_type = AnyType(TypeOfAny.explicit) if self.erase_types: instance_type = erase_typevars(instance_type) return infer_constraints(template.item, instance_type, self.direction) diff --git a/test-data/unit/check-classes.test b/test-data/unit/check-classes.test index 2cd43c74ebb5..933b463bf500 100644 --- a/test-data/unit/check-classes.test +++ b/test-data/unit/check-classes.test @@ -3784,6 +3784,25 @@ foo(X) [builtins fixtures/tuple.pyi] [out] +[case testInferGenericFromAnyTypeObject] +from typing import Any, TypeVar, assert_type + +T = TypeVar("T") + +def instantiate(cls: type[T]) -> T: + return cls() + +assert_type(instantiate(Any), Any) +reveal_type(instantiate(Any)) # N: Revealed type is "Any" +[file typing.pyi] +class Any: ... +class Iterable: ... +class Mapping: ... +class TypeVar: + def __init__(self, name: str) -> None: ... +def assert_type(value, typ): ... +[out] + [case testTypeUsingTypeCTypeAnyMember] from typing import Type, Any def foo(arg: Type[Any]):