def init(self, **kwargs):
   self._cached_byte_size = 0
   self._cached_byte_size_dirty = len(kwargs) > 0
   self._fields = {}
   # _unknown_fields is () when empty for efficiency, and will be turned into
   # a list if fields are added.
   self._unknown_fields = ()
   self._is_present_in_parent = false
   self._listener = message_listener_mod.nullmessagelistener()
   self._listener_for_children = _listener(self)
   for field_name, field_value in kwargs.iteritems():
     field = _getfieldbyname(message_descriptor, field_name)
     if field is none:
       raise typeerror("%s() got an unexpected keyword argument '%s'" %
                       (message_descriptor.name, field_name))
     if field.label == _fielddescriptor.label_repeated:
       copy = field._default_constructor(self)
       if field.cpp_type == _fielddescriptor.cpptype_message:  # composite
         for val in field_value:
           copy.add().mergefrom(val)
       else:  # scalar
         copy.extend(field_value)
       self._fields[field] = copy
     elif field.cpp_type == _fielddescriptor.cpptype_message:
       copy = field._default_constructor(self)
       copy.mergefrom(field_value)
       self._fields[field] = copy
     else:
       setattr(self, field_name, field_value)
 def setlistener(self, listener):
   if listener is none:
     self._listener = message_listener_mod.nullmessagelistener()
   else:
     self._listener = listener