docs: 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'])