inspect.signature: Support classes without user-defined __init__/__new__ #20308
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 @@
                 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