docs: def add_observer(self, observer, identify_observed=False):
          """Register an observer to observe me.
  
          Args:
              observer: The callable to register as an observer.
              identify_observed: If True, then the observer will get myself
                  passed as an additional first argument whenever it is invoked.
                  See ObserverFunction and ObserverBoundMethod to see how this
                  works.
  
          Returns:
              True if the observer was added, False otherwise.
  
          The observing function or method will be called whenever I am called,
          and with the same arguments and keyword arguments.
  
          If a bound method or function has already been registered as an
          observer, trying to add it again does nothing. In other words, there is
          no way to sign up an observer to be called back multiple times. This
          was a conscious design choice which users are invited to complain about
          if there is a compelling use case where this is inconvenient.
          """
  
          # If the observer is a bound method,
          if hasattr(observer, "__self__"):
              result = self._add_bound_method(observer, identify_observed)
          # Otherwise, assume observer is a normal function.
          else:
              result = self._add_function(observer, identify_observed)
          return result