code: def get_hosts_by_explosion(self, hostgroups):
          # 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 HG we explode
          # so if True here, it must be a loop in HG
          # calls... not GOOD!
          if self.rec_tag:
              logger.error("[hostgroup::%s] got a loop in hostgroup definition", self.get_name())
              return self.get_hosts()
  
          # Ok, not a loop, we tag it and continue
          self.rec_tag = True
  
          hg_mbrs = self.get_hostgroup_members()
          for hg_mbr in hg_mbrs:
              hostgroup = hostgroups.find_by_name(hg_mbr.strip())
              if hostgroup is not None:
                  value = hostgroup.get_hosts_by_explosion(hostgroups)
                  if value is not None:
                      self.add_members(value)
  
          return self.get_hosts()
docs: Get hosts of this group
  
          :param hostgroups: Hostgroup object
          :type hostgroups: alignak.objects.hostgroup.Hostgroups
          :return: list of hosts of this group
          :rtype: list