code: def _get_reference_classnames(self, classname, namespace,
                                    resultclass_name, role):
          
  
          self._validate_namespace(namespace)
  
          result_classes = self._classnamedict(resultclass_name, namespace)
  
          rtn_classnames_set = set()
          role = role.lower() if role else role
  
          for cl in self._get_association_classes(namespace):
              for prop in six.itervalues(cl.properties):
                  if prop.type == 'reference' and \
                          self._ref_prop_matches(prop, classname,
                                                 cl.classname,
                                                 result_classes,
                                                 role):
                      rtn_classnames_set.add(cl.classname)
          return list(rtn_classnames_set)
docs: Get list of classnames that are references for which this classname
          is a target filtered by the result_class and role parameters if they
          are none.
          This is a common method used by all of the other reference and
          associator methods to create a list of reference classnames
  
          Returns:
              list of classnames that satisfy the criteria.