# Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import inspect def IsDirectlyConstructable(cls): """Returns True if instance of |cls| can be construct without arguments.""" assert inspect.isclass(cls) if not hasattr(cls, '__init__'): # Case |class A: pass|. return True if cls.__init__ is object.__init__: # Case |class A(object): pass|. return True # Case |class (object):| with |__init__| other than |object.__init__|. args, _, _, defaults = inspect.getargspec(cls.__init__) if defaults is None: defaults = () # Return true if |self| is only arg without a default. return len(args) == len(defaults) + 1