docs: def new(self, *args, **kwargs):
          '''
          Create a new object of this type. It is also available as __call__, so you can create a new object
          just like creating a class instance: a = mytype(a=1,b=2)
          
          :param args: Replace the embedded struct type. Each argument is a tuple (name, newtype).
                       It is equivalent to call _replace_embedded_type with *name* and *newtype*
                       one by one. Both the "directly" embedded struct and the embedded struct inside another
                       embedded struct can be set. If you want to replace an embedded struct in a
                       replaced struct type, make sure the outer struct is replaced first. The embeded
                       struct type must have a *name* to be replaced by specify *name* option.
                         
          :param kwargs: extra key-value arguments, each one will be set on the new object, to set value
                         to the fields conveniently.
          
          :returns: a new object, with the specified "kwargs" set.
          '''
          obj = self.parser().new()
          for k,v in args:
              obj._replace_embedded_type(k,v)
          for k,v in kwargs.items():
              setattr(obj, k, v)
          return obj