Skip to content

Commit e45ac10

Browse files
Thiagoddfisher
authored andcommitted
Implicitly assign class type to the first parameter of its methods (#1514) (#1586)
Only non-static/non-class methods have their first parameter inferred.
1 parent 9624b54 commit e45ac10

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

mypy/nodes.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2140,8 +2140,14 @@ def function_type(func: FuncBase, fallback: 'mypy.types.Instance') -> 'mypy.type
21402140
for arg in fdef.arguments:
21412141
names.append(arg.variable.name())
21422142

2143+
if fdef.is_method() and not fdef.is_static and not fdef.is_class:
2144+
self_arg = [mypy.types.Instance(func.info, [])] # type: List[mypy.types.Type]
2145+
arg_types = self_arg + ([mypy.types.AnyType()] * (len(fdef.arguments) - 1))
2146+
else:
2147+
arg_types = [mypy.types.AnyType()] * len(fdef.arguments)
2148+
21432149
return mypy.types.CallableType(
2144-
[mypy.types.AnyType()] * len(fdef.arguments),
2150+
arg_types,
21452151
[arg.kind for arg in fdef.arguments],
21462152
names,
21472153
mypy.types.AnyType(),

mypy/test/data/typexport-basic.test

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -890,7 +890,7 @@ class A:
890890
def f(self): pass
891891
A.f
892892
[out]
893-
MemberExpr(5) : def (self: Any) -> Any
893+
MemberExpr(5) : def (self: A) -> Any
894894

895895
[case testOverloadedUnboundMethod]
896896
## MemberExpr
@@ -914,7 +914,7 @@ class A:
914914
def f(self, x): pass
915915
A.f
916916
[out]
917-
MemberExpr(8) : Overload(def (self: Any) -> Any, def (self: Any, x: Any) -> Any)
917+
MemberExpr(8) : Overload(def (self: A) -> Any, def (self: A, x: Any) -> Any)
918918

919919
[case testUnboundMethodWithInheritance]
920920
## MemberExpr
@@ -977,7 +977,7 @@ class A(Generic[t]):
977977
def f(self, x): pass
978978
A.f(None, None)
979979
[out]
980-
MemberExpr(7) : def (self: Any, x: Any) -> Any
980+
MemberExpr(7) : def (self: A, x: Any) -> Any
981981

982982
[case testGenericMethodOfGenericClass]
983983
## MemberExpr

0 commit comments

Comments
 (0)