class_docstr: Python representation for a PostgreSQL |range|_ type.
  
  :param lower: lower bound for the range. `!None` means unbound
  :param upper: upper bound for the range. `!None` means unbound
  :param bounds: one of the literal strings ``()``, ``[)``, ``(]``, ``[]``,
      representing whether the lower or upper bounds are included
  :param empty: if `!True`, the range is empty
class_docstr_tok: ["Python","representation","for","a","PostgreSQL","|range|_","type",".",":","param","lower",":","lower","bound","for","the","range",".","`","!","None","`","means","unbound",":","param","upper",":","upper","bound","for","the","range",".","`","!","None","`","means","unbound",":","param","bounds",":","one","of","the","literal","strings","``","(",")","``",",","``","[",")","``",",","``","(","]","``",",","``","[","]","``",",","representing","whether","the","lower","or","upper","bounds","are","included",":","param","empty",":","if","`","!","True","`",",","the","range","is","empty"]
code: def __lt__(self, other):
      if not isinstance(other, Range):
          return NotImplemented
      for attr in ("_lower", "_upper", "_bounds"):
          self_value = getattr(self, attr)
          other_value = getattr(other, attr)
          if self_value == other_value:
              pass
          elif self_value is None:
              return True
          elif other_value is None:
              return False
          else:
              return self_value < other_value
      return False
  
imports: import re
  from psycopg2._psycopg import ProgrammingError, InterfaceError
  from psycopg2.extensions import ISQLQuote, adapt, register_adapter
  from psycopg2.extensions import new_type, new_array_type, register_type
label_desc: Use image node_id 16 for calling the Range obj's underlying member method code with example usage: obj.__lt__(other) and returns: False, NotImplemented, True, False, unknown