class_docstr: Contains the metadata request info of a consumer.
  
  Instances of `MethodMetadataRequest` are used in this class for each
  available method under `metadatarequest.{method}`.
  
  Consumer-only classes such as simple estimators return a serialized
  version of this class as the output of `get_metadata_routing()`.
  
  .. versionadded:: 1.3
  
  Parameters
  ----------
  owner : str
      The name of the object to which these requests belong.
class_docstr_tok: ["Contains","the","metadata","request","info","of","a","consumer",".","Instances","of","`","MethodMetadataRequest","`","are","used","in","this","class","for","each","available","method","under","`","metadatarequest.","{","method","}","`",".","Consumer-only","classes","such","as","simple","estimators","return","a","serialized","version","of","this","class","as","the","output","of","`","get_metadata_routing","(",")","`",".","..","versionadded",":",":","1.3","Parameters","--","--","--","--","--","owner",":","str","The","name","of","the","object","to","which","these","requests","belong","."]
code: def __getattr__(self, name):
      # Called when the default attribute access fails with an AttributeError
      # (either __getattribute__() raises an AttributeError because name is
      # not an instance attribute or an attribute in the class tree for self;
      # or __get__() of a name property raises AttributeError). This method
      # should either return the (computed) attribute value or raise an
      # AttributeError exception.
      # https://docs.python.org/3/reference/datamodel.html#object.__getattr__
      if name not in COMPOSITE_METHODS:
          raise AttributeError(
              f"'{self.__class__.__name__}' object has no attribute '{name}'"
          )
  
      requests = {}
      for method in COMPOSITE_METHODS[name]:
          mmr = getattr(self, method)
          existing = set(requests.keys())
          upcoming = set(mmr.requests.keys())
          common = existing & upcoming
          conflicts = [
              key
              for key in common
              if requests[key] != mmr._requests[key]
          ]
          if conflicts:
              raise ValueError(
                  f"Conflicting metadata requests for {', '.join(conflicts)} while"
                  f" composing the requests for {name}. Metadata with the same name"
                  f" for methods {', '.join(COMPOSITE_METHODS[name])} should have the"
                  " same request value."
              )
          requests.update(mmr._requests)
      return MethodMetadataRequest(
          owner=self.owner, method=name, requests=requests
      )
  
imports: import inspect
  from collections import namedtuple
  from copy import deepcopy
  from typing import TYPE_CHECKING, Optional, Union
  from warnings import warn
  from ..None import get_config
  from ..exceptions import UnsetMetadataPassedError
  from ._bunch import Bunch
label_desc: Use image node_id 3 for calling the MetadataRequest obj's underlying member method code with example usage: obj.__getattr__(name) and returns: MethodMetadataRequest