def new(self, string=None, *args, **kwargs):
        """Returns a `_ChainedHashAlgorithm` if the underlying tuple
        (specifying the list of algorithms) is not empty, otherwise a
        `_NopHashAlgorithm` instance is returned."""
        if len(self):
            hobj = _ChainedHashAlgorithm(self, *args, **kwargs)
        else:
            hobj = _NopHashAlgorithm(*args, **kwargs)
        if string is not None:
            hobj.update(string)
        return hobj