Value of a reference property.

        You can set the reference with a Part, Part id or None value.
        Ensure that the model of the provided part, matches the configured model

        :return: a :class:`Part` or None
        :raises APIError: When unable to find the associated :class:`Part`

        Example
        -------
        Get the wheel reference property

        >>> part = project.part('Bike')
        >>> material_ref_property = part.property('Material Selection')
        >>> isinstance(material_ref_property, ReferenceProperty)
        True

        The value either returns a Part or is None if not set (yet)

        >>> type(material_ref_property.value) in (Part, None)
        True

        Get the selection of material instances containing the word material (icontains is for case-insensitive)

        >>> material_choices = project.parts(icontains='material')

        Choose random material option

        >>> from random import choice
        >>> chosen_material = choice(material_choices)

        Set chosen material
        1: provide the part

        >>> material_ref_property.value = chosen_material

        2: provide the id

        >>> material_ref_property.value = chosen_material.id

def value(self):
        """Value of a reference property.

        You can set the reference with a Part, Part id or None value.
        Ensure that the model of the provided part, matches the configured model

        :return: a :class:`Part` or None
        :raises APIError: When unable to find the associated :class:`Part`

        Example
        -------
        Get the wheel reference property

        >>> part = project.part('Bike')
        >>> material_ref_property = part.property('Material Selection')
        >>> isinstance(material_ref_property, ReferenceProperty)
        True

        The value either returns a Part or is None if not set (yet)

        >>> type(material_ref_property.value) in (Part, None)
        True

        Get the selection of material instances containing the word material (icontains is for case-insensitive)

        >>> material_choices = project.parts(icontains='material')

        Choose random material option

        >>> from random import choice
        >>> chosen_material = choice(material_choices)

        Set chosen material
        1: provide the part

        >>> material_ref_property.value = chosen_material

        2: provide the id

        >>> material_ref_property.value = chosen_material.id

        """
        if not self._value:
            return None

        return self._client.part(pk=self._value['id'])