@@ -1053,7 +1053,10 @@ def get_kind(arg_name: str) -> nodes.ArgKind:
10531053
10541054
10551055def  _verify_signature (
1056-     stub : Signature [nodes .Argument ], runtime : Signature [inspect .Parameter ], function_name : str 
1056+     stub : Signature [nodes .Argument ],
1057+     runtime : Signature [inspect .Parameter ],
1058+     function_name : str ,
1059+     warn_runtime_is_object_init : bool  =  False ,
10571060) ->  Iterator [str ]:
10581061    # Check positional arguments match up 
10591062    for  stub_arg , runtime_arg  in  zip (stub .pos , runtime .pos ):
@@ -1098,6 +1101,8 @@ def _verify_signature(
10981101                    msg  =  f'runtime does not have parameter "{ stub_arg .variable .name }  
10991102                    if  runtime .varkw  is  not None :
11001103                        msg  +=  ". Maybe you forgot to make it keyword-only in the stub?" 
1104+                     elif  warn_runtime_is_object_init :
1105+                         msg  +=  ". You may need to write stubs for __new__ instead of __init__." 
11011106                    yield  msg 
11021107                else :
11031108                    yield  f'stub parameter "{ stub_arg .variable .name }  
@@ -1137,7 +1142,11 @@ def _verify_signature(
11371142                if  arg  not  in runtime_arg .name  for  runtime_arg  in  runtime .pos [len (stub .pos ) :]}:
11381143                    yield  f'runtime parameter "{ arg }  
11391144            else :
1140-                 yield  f'runtime does not have parameter "{ arg }  
1145+                 msg  =  f'runtime does not have parameter "{ arg }  
1146+                 if  warn_runtime_is_object_init :
1147+                     msg  +=  ". You may need to write stubs for __new__ instead of __init__." 
1148+                 yield  msg 
1149+ 
11411150    for  arg  in  sorted (set (runtime .kwonly ) -  set (stub .kwonly )):
11421151        if  arg  in  {stub_arg .variable .name  for  stub_arg  in  stub .pos }:
11431152            # Don't report this if we've reported it before 
@@ -1223,7 +1232,12 @@ def verify_funcitem(
12231232    if  not  signature :
12241233        return 
12251234
1226-     for  message  in  _verify_signature (stub_sig , runtime_sig , function_name = stub .name ):
1235+     for  message  in  _verify_signature (
1236+         stub_sig ,
1237+         runtime_sig ,
1238+         function_name = stub .name ,
1239+         warn_runtime_is_object_init = runtime  is  object .__init__ ,
1240+     ):
12271241        yield  Error (
12281242            object_path ,
12291243            "is inconsistent, "  +  message ,
@@ -1333,7 +1347,12 @@ def verify_overloadedfuncdef(
13331347    stub_sig  =  Signature .from_overloadedfuncdef (stub )
13341348    runtime_sig  =  Signature .from_inspect_signature (signature )
13351349
1336-     for  message  in  _verify_signature (stub_sig , runtime_sig , function_name = stub .name ):
1350+     for  message  in  _verify_signature (
1351+         stub_sig ,
1352+         runtime_sig ,
1353+         function_name = stub .name ,
1354+         warn_runtime_is_object_init = runtime  is  object .__init__ ,
1355+     ):
13371356        # TODO: This is a little hacky, but the addition here is super useful 
13381357        if  "has a default value of type"  in  message :
13391358            message  +=  (
0 commit comments