class_docstr: A base class for Bokeh properties with simple get/set and serialization
  behavior.
class_docstr_tok: ["A","base","class","for","Bokeh","properties","with","simple","get\/set","and","serialization","behavior","."]
docstr: Send a change event notification if the property is set to a
  value is not equal to ``old``.
  
  Args:
      obj (HasProps)
          The object the property is being set on.
  
      old (obj) :
          The previous value of the property to compare
  
  Returns:
      None
code: def trigger_if_changed(self, obj: HasProps, old: Any) -> None:
      """Send a change event notification if the property is set to a
      value is not equal to ``old``.
  
      Args:
          obj (HasProps)
              The object the property is being set on.
  
          old (obj) :
              The previous value of the property to compare
  
      Returns:
          None
  
      """
      new_value = self.__get__(obj, obj.__class__)
      if not self.property.matches(old, new_value):
          self._trigger(obj, old, new_value)
  
imports: from __future__ import annotations
  import logging
  from copy import copy
  from types import FunctionType
  from typing import TYPE_CHECKING, Any, Callable, Generic, TypeVar
  from ...util.deprecation import deprecated
  from .singletons import Undefined
  from .wrappers import PropertyValueColumnData, PropertyValueContainer
label_desc: Use image node_id 10 for calling the PropertyDescriptor obj's underlying member method code with example usage: obj.trigger_if_changed(obj, old) without return types