code: def _get_subclass_names(self, classname, namespace, deep_inheritance):
          
          assert classname is None or isinstance(classname, (six.string_types,
                                                             CIMClassName))
  
          if isinstance(classname, CIMClassName):
              classname = classname.classname
  
          # retrieve first level of subclasses for which classname is superclass
          try:
              classes = self.classes[namespace]
          except KeyError:
              classes = NocaseDict()
          if classname is None:
              rtn_classnames = [
                  cl.classname for cl in six.itervalues(classes)
                  if cl.superclass is None]
          else:
              rtn_classnames = [
                  cl.classname for cl in six.itervalues(classes)
                  if cl.superclass and cl.superclass.lower() == classname.lower()]
  
          # recurse for next level of class hiearchy
          if deep_inheritance:
              subclass_names = []
              if rtn_classnames:
                  for cn in rtn_classnames:
                      subclass_names.extend(
                          self._get_subclass_names(cn, namespace,
                                                   deep_inheritance))
              rtn_classnames.extend(subclass_names)
          return rtn_classnames
docs: Get class names that are subclasses of the
              classname input parameter from the repository.
  
              If DeepInheritance is False, get only classes in the
              repository for the defined namespace for which this class is a
              direct super class.
  
              If deep_inheritance is `True`, get all direct and indirect
              subclasses.  If false, get only a the next level of the
              hiearchy.
  
          Returns:
              list of strings with the names of all subclasses of `classname`.