diff -r 1e74350dd056 Lib/inspect.py --- a/Lib/inspect.py Tue Jun 17 22:27:46 2014 -0500 +++ b/Lib/inspect.py Wed Jun 18 15:24:07 2014 +0300 @@ -1938,7 +1938,7 @@ except AttributeError: pass else: - if sig is not None: + if sig is not None and isinstance(sig, Signature): return sig try: diff -r 1e74350dd056 Lib/test/test_inspect.py --- a/Lib/test/test_inspect.py Tue Jun 17 22:27:46 2014 -0500 +++ b/Lib/test/test_inspect.py Wed Jun 18 15:24:07 2014 +0300 @@ -3166,7 +3166,17 @@ self.assertIn(module.__cached__, output) self.assertEqual(err, b'') - + def test_custom_getattr(self): + class _Method: + def __init__(self, send, name): + self.__send = send + self.__name = name + def __getattr__(self, name): + return _Method(self.__send, "%s.%s" % (self.__name, name)) + def __call__(self, a, b, c): + return self.__send(self.__name, a, b, c) + sig = inspect.signature(_Method("a", "b")) + self.assertEqual(str(sig), "(a, b, c)") def test_main():