class_docstr: Custom ast walker. Parsers of other engines should subclass this class
  if necessary.
  
  Parameters
  ----------
  env : Scope
  engine : str
  parser : str
  preparser : callable
class_docstr_tok: ["Custom","ast","walker",".","Parsers","of","other","engines","should","subclass","this","class","if","necessary",".","Parameters","--","--","--","--","--","env",":","Scope","engine",":","str","parser",":","str","preparser",":","callable"]
code: def visit_Attribute(self, node, **kwargs):
      attr = node.attr
      value = node.value
  
      ctx = node.ctx
      if isinstance(ctx, ast.Load):
          # resolve the value
          resolved = self.visit(value).value
          try:
              v = getattr(resolved, attr)
              name = self.env.add_tmp(v)
              return self.term_type(name, self.env)
          except AttributeError:
              # something like datetime.datetime where scope is overridden
              if isinstance(value, ast.Name) and value.id == attr:
                  return resolved
              raise
  
      raise ValueError(
          f"Invalid Attribute context {type(ctx).__name__}"
      )
  
imports: from __future__ import annotations
  import ast
  from functools import partial, reduce
  from keyword import iskeyword
  import tokenize
  from typing import Callable, ClassVar, TypeVar
  import numpy
  from pandas.errors import UndefinedVariableError
  import pandas.core.common
  from pandas.core.computation.ops import ARITH_OPS_SYMS, BOOL_OPS_SYMS, CMP_OPS_SYMS, LOCAL_TAG, MATHOPS, REDUCTIONS, UNARY_OPS_SYMS, BinOp, Constant, Div, FuncNode, Op, Term, UnaryOp, is_term
  from pandas.core.computation.parsing import clean_backtick_quoted_toks, tokenize_string
  from pandas.core.computation.scope import Scope
  from pandas.io.formats import printing
label_desc: Use image node_id 23 for calling the BaseExprVisitor obj's underlying member method code with example usage: obj.visit_Attribute(node) and returns: self, resolved