def add_item(self, *args, **kwargs):
        """Add a new item to the group. The parameters are used to construct an
        :py:class:`Item`. If `id` is `None`, it will be automatically populated
        with an ID that is not already in use.

        See the class documentation for the behaviour when the name or ID
        collides with an existing one. In addition, if the item descriptor is
        identical to an existing one and a value, this value is assigned to
        the existing item.
        """
        item = Item(*args, **kwargs)
        if item.id is None:
            item.id = _UNRESERVED_ID
            while item.id in self._by_id:
                item.id += 1
        self._add_item(item)
        return item
Add a new item to the group. The parameters are used to construct an
        :py:class:`Item`. If `id` is `None`, it will be automatically populated
        with an ID that is not already in use.

        See the class documentation for the behaviour when the name or ID
        collides with an existing one. In addition, if the item descriptor is
        identical to an existing one and a value, this value is assigned to
        the existing item.