def _args_length(constructor, global_ns): if isinstance(constructor, str): ctor_ast = ast.parse(constructor, mode='eval') if ( isinstance(ctor_ast.body, ast.Subscript) and isinstance(ctor_ast.body.slice, ast.Index)): index = ctor_ast.body.slice.value ctor_ast.body = ctor_ast.body.value try: value = eval( compile(ctor_ast, '', 'eval'), global_ns, global_ns) except Exception: return None if value is Ctor: if isinstance(index, ast.Tuple): return len(index.elts) return 1 try: constructor = eval(constructor, global_ns, global_ns) except Exception: return None if issubclass(constructor, Ctor) and constructor is not Ctor: return len(constructor.__args__) return None