class_docstr: Base class for enum-like classes using class-attributes with string values to represent enum key/value pairs 
class_docstr_tok: ["Base","class","for","enum-like","classes","using","class-attributes","with","string","values","to","represent","enum","key\/value","pairs"]
docstr: Extract list of enum-like options based on the derived classes' attributes.
  Any class attribute who's key doesn't start with an underscore and who's value is not a class method
   or callable is considered an option.
  Returns a list of attribute names representing the options.
docstr_tok: ["Extract","list","of","enum-like","options","based","on","the","derived","classes","'","attributes",".","Any","class","attribute","who","'s","key","does","n't","start","with","an","underscore","and","who","'s","value","is","not","a","class","method","or","callable","is","considered","an","option",".","Returns","a","list","of","attribute","names","representing","the","options","."]
code: def values(cls):
      """Extract list of enum-like options based on the derived classes' attributes.
      Any class attribute who's key doesn't start with an underscore and who's value is not a class method
       or callable is considered an option.
      Returns a list of attribute names representing the options.
      """
      if cls.__cache is None:
          cls.__cache = [
              v
              for k, v in vars(cls).items()
              if not k.startswith("_")
              and not callable(v)
              and not isinstance(v, classmethod)
          ]
      return cls.__cache
  
label_desc: Use image node_id 1 for calling the EnumOptions obj's underlying member method code with example usage: obj.values(cls) and returns: cls