Creates a new class that can represent a record with the
    specified *fields*. This is equal to a mutable namedtuple.
    The returned class also supports keyword arguments in its
    constructor.

    :param __name: The name of the recordclass.
    :param __fields: A string or list of field names.
    :param defaults: Default values for fields. The defaults
      may list field names that haven't been listed in *fields*.

def new(cls, __name, __fields, **defaults):
    '''
    Creates a new class that can represent a record with the
    specified *fields*. This is equal to a mutable namedtuple.
    The returned class also supports keyword arguments in its
    constructor.

    :param __name: The name of the recordclass.
    :param __fields: A string or list of field names.
    :param defaults: Default values for fields. The defaults
      may list field names that haven't been listed in *fields*.
    '''

    name = __name
    fields = __fields
    fieldset = set(fields)

    if isinstance(fields, str):
      if ',' in fields:
        fields = fields.split(',')
      else:
        fields = fields.split()
    else:
      fields = list(fields)

    for key in defaults.keys():
      if key not in fields:
        fields.append(key)

    class _record(cls):
      __slots__ = fields
      __defaults__ = defaults
    _record.__name__ = name
    return _record