class_docstr: An attribute of an object can be a hyperparam. 
docstr: Args:
      obj: the object
      attrname (str): the attribute
      readable_name(str): The name to display and set with. Defaults to be ``attrname``.
docstr_tok: ["Args",":","obj",":","the","object","attrname","(","str",")",":","the","attribute","readable_name","(","str",")",":","The","name","to","display","and","set","with",".","Defaults","to","be","``","attrname","``","."]
code: def __init__(self, obj, attrname, readable_name=None):
      """
      Args:
          obj: the object
          attrname (str): the attribute
          readable_name(str): The name to display and set with. Defaults to be ``attrname``.
      """
      self.obj = obj
      self.attrname = attrname
      if readable_name is None:
          self._readable_name = attrname
      else:
          self._readable_name = readable_name
  
imports: import operator
  import os
  import numpy
  from abc import ABCMeta, abstractmethod
  from collections import deque
  import six
  from ..compat import tfv1
  from ..tfutils.common import get_op_tensor_name
  from ..utils import logger
  from .base import Callback
label_desc: Use image node_id 1 to create a new ObjAttrParam object from inherited base classes: HyperParam with example: obj = ObjAttrParam(obj, attrname, readable_name)