class_docstr: Vectorized environment base class
  
  :param venv: (VecEnv) the vectorized environment to wrap
  :param observation_space: (Gym Space) the observation space (can be None to load from venv)
  :param action_space: (Gym Space) the action space (can be None to load from venv)
docstr: Find attribute from wrapped venv(s) if this wrapper does not have it.
  Useful for accessing attributes from venvs which are wrapped with multiple wrappers
  which have unique attributes of interest.
docstr_tok: ["Find","attribute","from","wrapped","venv","(","s",")","if","this","wrapper","does","not","have","it",".","Useful","for","accessing","attributes","from","venvs","which","are","wrapped","with","multiple","wrappers","which","have","unique","attributes","of","interest","."]
code: def __getattr__(self, name):
      """Find attribute from wrapped venv(s) if this wrapper does not have it.
      Useful for accessing attributes from venvs which are wrapped with multiple wrappers
      which have unique attributes of interest.
      """
      blocked_class = self.getattr_depth_check(
          name, already_found=False
      )
      if blocked_class is not None:
          own_class = "{0}.{1}".format(
              type(self).__module__, type(self).__name__
          )
          format_str = (
              "Error: Recursive attribute lookup for {0} from {1} is "
              "ambiguous and hides attribute from {2}"
          )
          raise AttributeError(
              format_str.format(name, own_class, blocked_class)
          )
  
      return self.getattr_recursive(name)
  
imports: from abc import ABC, abstractmethod
  import inspect
  import pickle
  from typing import Sequence, Optional, List, Union
  import cloudpickle
  import numpy
  from stable_baselines import logger
  from stable_baselines.common.tile_images import tile_images
label_desc: Use image node_id 12 for calling the VecEnvWrapper obj's underlying member method code with example usage: obj.__getattr__(name) and returns: self