code: def declared_metaclass(self, context=None):
          
          for base in self.bases:
              try:
                  for baseobj in base.infer(context=context):
                      if isinstance(baseobj, ClassDef) and baseobj.hide:
                          self._metaclass = baseobj._metaclass
                          self._metaclass_hack = True
                          break
              except exceptions.InferenceError:
                  pass
  
          if self._metaclass:
              # Expects this from Py3k TreeRebuilder
              try:
                  return next(
                      node
                      for node in self._metaclass.infer(context=context)
                      if node is not util.Uninferable
                  )
              except (exceptions.InferenceError, StopIteration):
                  return None
  
          return None
docs: Return the explicit declared metaclass for the current class.
  
          An explicit declared metaclass is defined
          either by passing the ``metaclass`` keyword argument
          in the class definition line (Python 3) or (Python 2) by
          having a ``__metaclass__`` class attribute, or if there are
          no explicit bases but there is a global ``__metaclass__`` variable.
  
          :returns: The metaclass of this class,
              or None if one could not be found.
          :rtype: NodeNG or None