code: def _ipopo_class_field_property(name, value, methods_prefix):
      # type: (str, Any, str) -> property
      
      # The property lock
      lock = threading.RLock()
  
      # Prepare the methods names
      getter_name = "{0}{1}".format(methods_prefix, constants.IPOPO_GETTER_SUFFIX)
      setter_name = "{0}{1}".format(methods_prefix, constants.IPOPO_SETTER_SUFFIX)
  
      local_holder = Holder(value)
  
      def get_value(self):
          """
          Retrieves the property value, from the iPOPO dictionaries
          """
          getter = getattr(self, getter_name, None)
          if getter is not None:
              # Use the component getter
              with lock:
                  return getter(self, name)
          else:
              # Use the local holder
              return local_holder.value
  
      def set_value(self, new_value):
          """
          Sets the property value and trigger an update event
  
          :param new_value: The new property value
          """
          setter = getattr(self, setter_name, None)
          if setter is not None:
              # Use the component setter
              with lock:
                  setter(self, name, new_value)
          else:
              # Change the local holder
              local_holder.value = new_value
  
      return property(get_value, set_value)
docs: Sets up an iPOPO field property, using Python property() capabilities
  
      :param name: The property name
      :param value: The property default value
      :param methods_prefix: The common prefix of the getter and setter injected
                             methods
      :return: A generated Python property()