code: def explode(self, contactgroups, notificationways):
          self.apply_partial_inheritance('contactgroups')
          for prop in Contact.special_properties:
              if prop == 'contact_name':
                  continue
              self.apply_partial_inheritance(prop)
          for contact in self:
              if not (hasattr(contact, 'contact_name') and hasattr(contact, 'contactgroups')):
                  continue
              for contactgroup in contact.contactgroups:
                  contactgroups.add_member(contact.contact_name, contactgroup.strip())
          for contact in self:
              need_notificationway = False
              params = {}
              for param in Contact.simple_way_parameters:
                  if hasattr(contact, param):
                      need_notificationway = True
                      params[param] = getattr(contact, param)
                  elif contact.properties[param].has_default:
                      setattr(contact, param, contact.properties[param].default)
              if need_notificationway:
                  cname = getattr(contact, 'contact_name', getattr(contact, 'alias', ''))
                  nw_name = cname + '_inner_nw'
                  notificationways.new_inner_member(nw_name, params)
                  if not hasattr(contact, 'notificationways'):
                      contact.notificationways = [nw_name]
                  else:
                      contact.notificationways = list(contact.notificationways)
                      contact.notificationways.append(nw_name)