<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def create( cls, node: Union[Node, str], name: str, backing_device: Union[BlockDevice, Partition], cache_set: Union[BcacheCacheSet, int], cache_mode: CacheMode, *, uuid: str = None):
 """ Create a Bcache on a Node. :param node: Node to create the interface on. :type node: `Node` or `str` :param name: Name of the Bcache. :type name: `str` :param backing_device: Either a block device or partition to create the Bcache from. :type backing_device: `BlockDevice` or `Partition` :param cache_set: Bcache cache set to use in front of backing device. :type cache_set: `BcacheCacheSet` or `int` :param cache_mode: Caching mode to use for this device. :type cache_mode: `CacheMode` :type backing_device: `BlockDevice` or `Partition` :param uuid: The UUID for the Bcache (optional). :type uuid: `str` """

        params = {
            'name': name,
        }
        if isinstance(node, str):
            params['system_id'] = node
        elif isinstance(node, Node):
            params['system_id'] = node.system_id
        else:
            raise TypeError(
                'node must be a Node or str, not %s' % (
                    type(node).__name__))

        if isinstance(backing_device, BlockDevice):
            params['backing_device'] = backing_device.id
        elif isinstance(backing_device, Partition):
            params['backing_partition'] = backing_device.id
        else:
            raise TypeError(
                "backing_device must be a BlockDevice or Partition, "
                "not %s" % type(backing_device).__name__)

        if isinstance(cache_set, BcacheCacheSet):
            params['cache_set'] = cache_set.id
        elif isinstance(cache_set, int):
            params['cache_set'] = cache_set
        else:
            raise TypeError(
                "cache_set must be a BcacheCacheSet or int, "
                "not %s" % type(cache_set).__name__)

        if isinstance(cache_mode, CacheMode):
            params['cache_mode'] = cache_mode.value
        else:
            raise TypeError(
                "cache_mode must be a CacheMode, "
                "not %s" % type(cache_mode).__name__)

        if uuid is not None:
            params['uuid'] = uuid
        return cls._object(await cls._handler.create(**params))