code: def _traverse_attr(
      obj: object,
      names: str,
      attrfcn: Callable,
      dictfcn: Callable,
      listfcn: Callable,
  ):
      """Traverse the attribute of an object.
  
      Parameters
      ----------
      obj : object
          Object to traverse the attribute from.
      names : str
          Name of the attribute.
      attrfcn : Callable
          Function to get the attribute.
      dictfcn : Callable
          Function to get the dictionary.
      listfcn : Callable
          Function to get the list.
  
      Returns
      -------
      val : object
          The value of the attribute.
  
      """
      if len(names) == 1:
          return _applyfcn(obj, names[0], attrfcn, dictfcn, listfcn)
      else:
          return _applyfcn(
              _get_attr(obj, names[:-1]),
              names[-1],
              attrfcn,
              dictfcn,
              listfcn,
          )
  
file_path: deepchem/deepchem/utils/attribute_utils.py
imports: import re
  import ast
  from typing import Callable, Any
label_desc: Use image node_id 8 for calling a global function with example usage: _traverse_attr(obj, names, attrfcn, dictfcn, listfcn) and returns: _applyfcn, _applyfcn