docs: def _property_search(self, fobj):
          """Return full name if object is a class property, otherwise return None."""
          # Get class object
          scontext = fobj.f_locals.get("self", None)
          class_obj = scontext.__class__ if scontext is not None else None
          if not class_obj:
              del fobj, scontext, class_obj
              return None
          # Get class properties objects
          class_props = [
              (member_name, member_obj)
              for member_name, member_obj in inspect.getmembers(class_obj)
              if isinstance(member_obj, property)
          ]
          if not class_props:
              del fobj, scontext, class_obj
              return None
          class_file = inspect.getfile(class_obj).replace(".pyc", ".py")
          class_name = self._callables_obj.get_callable_from_line(
              class_file, inspect.getsourcelines(class_obj)[1]
          )
          # Get properties actions
          prop_actions_dicts = {}
          for prop_name, prop_obj in class_props:
              prop_dict = {"fdel": None, "fget": None, "fset": None}
              for action in prop_dict:
                  action_obj = getattr(prop_obj, action)
                  if action_obj:
                      # Unwrap action object. Contracts match the wrapped
                      # code object while exceptions registered in the
                      # body of the function/method which has decorators
                      # match the unwrapped object
                      prev_func_obj, next_func_obj = (
                          action_obj,
                          getattr(action_obj, "__wrapped__", None),
                      )
                      while next_func_obj:
                          prev_func_obj, next_func_obj = (
                              next_func_obj,
                              getattr(next_func_obj, "__wrapped__", None),
                          )
                      prop_dict[action] = [
                          id(_get_func_code(action_obj)),
                          id(_get_func_code(prev_func_obj)),
                      ]
              prop_actions_dicts[prop_name] = prop_dict
          # Create properties directory
          func_id = id(fobj.f_code)
          desc_dict = {"fget": "getter", "fset": "setter", "fdel": "deleter"}
          for prop_name, prop_actions_dict in prop_actions_dicts.items():
              for action_name, action_id_list in prop_actions_dict.items():
                  if action_id_list and (func_id in action_id_list):
                      prop_name = ".".join([class_name, prop_name])
                      del fobj, scontext, class_obj, class_props
                      return "{prop_name}({prop_action})".format(
                          prop_name=prop_name, prop_action=desc_dict[action_name]
                      )
          return None