code: def get_contacts_by_explosion(self, contactgroups):
          # pylint: disable=access-member-before-definition
          
          # First we tag the hg so it will not be explode
          # if a son of it already call it
          self.already_exploded = True
  
          # Now the recursive part
          # rec_tag is set to False every CG we explode
          # so if True here, it must be a loop in HG
          # calls... not GOOD!
          if self.rec_tag:
              logger.error("[contactgroup::%s] got a loop in contactgroup definition",
                           self.get_name())
              if hasattr(self, 'members'):
                  return self.members
  
              return ''
          # Ok, not a loop, we tag it and continue
          self.rec_tag = True
  
          cg_mbrs = self.get_contactgroup_members()
          for cg_mbr in cg_mbrs:
              contactgroup = contactgroups.find_by_name(cg_mbr.strip())
              if contactgroup is not None:
                  value = contactgroup.get_contacts_by_explosion(contactgroups)
                  if value is not None:
                      self.add_members(value)
          if hasattr(self, 'members'):
              return self.members
  
          return ''
docs: Get contacts of this group
  
          :param contactgroups: Contactgroups object, use to look for a specific one
          :type contactgroups: alignak.objects.contactgroup.Contactgroups
          :return: list of contact of this group
          :rtype: list[alignak.objects.contact.Contact]