@@ -1986,6 +1986,41 @@ def test(a, b:'foo'=10, *args:'bar', spam:'baz', ham=123, **kwargs:int):
19861986 ('kwargs' , ..., int , "var_keyword" )),
19871987 ...))
19881988
1989+ def test_signature_without_self (self ):
1990+ def test_args_only (* args ): # NOQA
1991+ pass
1992+
1993+ def test_args_kwargs_only (* args , ** kwargs ): # NOQA
1994+ pass
1995+
1996+ class A :
1997+ @classmethod
1998+ def test_classmethod (* args ): # NOQA
1999+ pass
2000+
2001+ @staticmethod
2002+ def test_staticmethod (* args ): # NOQA
2003+ pass
2004+
2005+ f1 = functools .partialmethod ((test_classmethod ), 1 )
2006+ f2 = functools .partialmethod ((test_args_only ), 1 )
2007+ f3 = functools .partialmethod ((test_staticmethod ), 1 )
2008+ f4 = functools .partialmethod ((test_args_kwargs_only ),1 )
2009+
2010+ self .assertEqual (self .signature (test_args_only ),
2011+ ((('args' , ..., ..., 'var_positional' ),), ...))
2012+ self .assertEqual (self .signature (test_args_kwargs_only ),
2013+ ((('args' , ..., ..., 'var_positional' ),
2014+ ('kwargs' , ..., ..., 'var_keyword' )), ...))
2015+ self .assertEqual (self .signature (A .f1 ),
2016+ ((('args' , ..., ..., 'var_positional' ),), ...))
2017+ self .assertEqual (self .signature (A .f2 ),
2018+ ((('args' , ..., ..., 'var_positional' ),), ...))
2019+ self .assertEqual (self .signature (A .f3 ),
2020+ ((('args' , ..., ..., 'var_positional' ),), ...))
2021+ self .assertEqual (self .signature (A .f4 ),
2022+ ((('args' , ..., ..., 'var_positional' ),
2023+ ('kwargs' , ..., ..., 'var_keyword' )), ...))
19892024 @cpython_only
19902025 @unittest .skipIf (MISSING_C_DOCSTRINGS ,
19912026 "Signature information for builtins requires docstrings" )
0 commit comments