<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def fetch_datatype(self, bucket, key, r=None, pr=None, basic_quorum=None, notfound_ok=None, timeout=None, include_context=None):
 """ Fetches the value of a Riak Datatype. .. note:: This request is automatically retried :attr:`retries` times if it fails due to network error. :param bucket: the bucket of the datatype, which must belong to a :class:`~riak.bucket.BucketType` :type bucket: :class:`~riak.bucket.RiakBucket` :param key: the key of the datatype :type key: string :param r: the read quorum :type r: integer, string, None :param pr: the primary read quorum :type pr: integer, string, None :param basic_quorum: whether to use the "basic quorum" policy for not-founds :type basic_quorum: bool, None :param notfound_ok: whether to treat not-found responses as successful :type notfound_ok: bool, None :param timeout: a timeout value in milliseconds :type timeout: int, None :param include_context: whether to return the opaque context as well as the value, which is useful for removal operations on sets and maps :type include_context: bool, None :rtype: :class:`~riak.datatypes.Datatype` """

        dtype, value, context = self._fetch_datatype(
            bucket, key, r=r, pr=pr, basic_quorum=basic_quorum,
            notfound_ok=notfound_ok, timeout=timeout,
            include_context=include_context)

        return TYPES[dtype](bucket=bucket, key=key, value=value,
                            context=context)