summaryrefslogtreecommitdiffstats
path: root/Lib/inspect.py
diff options
context:
space:
mode:
authorYury Selivanov <yselivanov@sprymix.com>2014-01-28 00:29:45 (GMT)
committerYury Selivanov <yselivanov@sprymix.com>2014-01-28 00:29:45 (GMT)
commite7dcc5e97a0a9cc7b90d4da72a4d9c69f49aac3c (patch)
tree2d6f59416481aa44d7bcd1f642d0e0a3087d4d44 /Lib/inspect.py
parent7aedea40d66a628236cba60f0d2712daf5e68198 (diff)
downloadcpython-e7dcc5e97a0a9cc7b90d4da72a4d9c69f49aac3c.zip
cpython-e7dcc5e97a0a9cc7b90d4da72a4d9c69f49aac3c.tar.gz
cpython-e7dcc5e97a0a9cc7b90d4da72a4d9c69f49aac3c.tar.bz2
inspect.signature: Support classes without user-defined __init__/__new__ #20308
Diffstat (limited to 'Lib/inspect.py')
-rw-r--r--Lib/inspect.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 9436e35..2211b8d 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -1561,6 +1561,17 @@ def signature(obj):
init = _get_user_defined_method(obj, '__init__')
if init is not None:
sig = signature(init)
+
+ if sig is None:
+ if type in obj.__mro__:
+ # 'obj' is a metaclass without user-defined __init__
+ # or __new__. Return a signature of 'type' builtin.
+ return signature(type)
+ else:
+ # We have a class (not metaclass), but no user-defined
+ # __init__ or __new__ for it
+ return signature(object)
+
elif not isinstance(obj, _NonUserDefinedCallables):
# An object with __call__
# We also check that the 'obj' is not an instance of