Create the class using all metaclasses.

    Args:
        metaclasses: A tuple of metaclasses that will be used to generate and
            replace a specified class.

    Returns:
        A decorator that will recreate the class using the specified
        metaclasses.

def metaclass(*metaclasses):
    # type: (*type) -> Callable[[type], type]
    """Create the class using all metaclasses.

    Args:
        metaclasses: A tuple of metaclasses that will be used to generate and
            replace a specified class.

    Returns:
        A decorator that will recreate the class using the specified
        metaclasses.
    """

    def _inner(cls):
        # pragma pylint: disable=unused-variable
        metabases = tuple(
            collections.OrderedDict(  # noqa: F841
                (c, None) for c in (metaclasses + (type(cls),))
            ).keys()
        )
        # pragma pylint: enable=unused-variable
        _Meta = metabases[0]
        for base in metabases[1:]:

            class _Meta(base, _Meta):  # pylint: disable=function-redefined
                pass

        return six.add_metaclass(_Meta)(cls)

    return _inner