diff --git a/mypy/checkmember.py b/mypy/checkmember.py index d1e9ab1cc777..c68b09669e85 100644 --- a/mypy/checkmember.py +++ b/mypy/checkmember.py @@ -7,7 +7,7 @@ Overloaded, TypeVarType, UnionType, PartialType, DeletedType, NoneTyp, TypeType, function_type ) -from mypy.nodes import TypeInfo, FuncBase, Var, FuncDef, SymbolNode, Context, MypyFile +from mypy.nodes import TypeInfo, FuncBase, Var, FuncDef, SymbolNode, Context, MypyFile, TypeVarExpr from mypy.nodes import ARG_POS, ARG_STAR, ARG_STAR2 from mypy.nodes import Decorator, OverloadedFuncDef from mypy.messages import MessageBuilder @@ -378,6 +378,9 @@ def analyze_class_attribute_access(itype: Instance, not_ready_callback(name, context) return AnyType() + if isinstance(node.node, TypeVarExpr): + return TypeVarType(node.tvar_def, node.tvar_def.line, node.tvar_def.column) + if isinstance(node.node, TypeInfo): return type_object_type(node.node, builtin_type) diff --git a/test-data/unit/check-typevar-values.test b/test-data/unit/check-typevar-values.test index a6071f6ee9cf..69feab2059e4 100644 --- a/test-data/unit/check-typevar-values.test +++ b/test-data/unit/check-typevar-values.test @@ -489,3 +489,11 @@ def outer(x: T) -> T: return inner1('a') # E: Argument 1 to "inner1" has incompatible type "str"; expected "int" return inner1(x) [out] + +[case testClassMemberTypeVarInFunctionBody] +from typing import TypeVar +class C: + T = TypeVar('T', int) + def f(self, x: T) -> T: + A = C.T + return x