def igetattr(self, name, context=None):
if name in self.special_attributes:<EOL><INDENT>yield self.special_attributes.lookup(name)<EOL>return<EOL><DEDENT>try:<EOL><INDENT>mro = self.super_mro()<EOL><DEDENT>except exceptions.SuperError as exc:<EOL><INDENT>raise exceptions.AttributeInferenceError(<EOL>(<EOL>"<STR_LIT>"<EOL>"<STR_LIT>"<EOL>),<EOL>target=self,<EOL>attribute=name,<EOL>context=context,<EOL>super_=exc.super_,<EOL>) from exc<EOL><DEDENT>except exceptions.MroError as exc:<EOL><INDENT>raise exceptions.AttributeInferenceError(<EOL>(<EOL>"<STR_LIT>"<EOL>"<STR_LIT>"<EOL>),<EOL>target=self,<EOL>attribute=name,<EOL>context=context,<EOL>mros=exc.mros,<EOL>cls=exc.cls,<EOL>) from exc<EOL><DEDENT>found = False<EOL>for cls in mro:<EOL><INDENT>if name not in cls.locals:<EOL><INDENT>continue<EOL><DEDENT>found = True<EOL>for inferred in bases._infer_stmts([cls[name]], context, frame=self):<EOL><INDENT>if not isinstance(inferred, scoped_nodes.FunctionDef):<EOL><INDENT>yield inferred<EOL>continue<EOL><DEDENT>if inferred.type == "<STR_LIT>":<EOL><INDENT>yield bases.BoundMethod(inferred, cls)<EOL><DEDENT>elif self._scope.type == "<STR_LIT>" and inferred.type == "<STR_LIT>":<EOL><INDENT>yield inferred<EOL><DEDENT>elif self._class_based or inferred.type == "<STR_LIT>":<EOL><INDENT>yield inferred<EOL><DEDENT>elif bases._is_property(inferred):<EOL><INDENT>try:<EOL><INDENT>yield from inferred.infer_call_result(self, context)<EOL><DEDENT>except exceptions.InferenceError:<EOL><INDENT>yield util.Uninferable<EOL><DEDENT><DEDENT>else:<EOL><INDENT>yield bases.BoundMethod(inferred, cls)<EOL><DEDENT><DEDENT><DEDENT>if not found:<EOL><INDENT>raise exceptions.AttributeInferenceError(<EOL>target=self, attribute=name, context=context<EOL>)<EOL><DEDENT>
Retrieve the inferred values of the given attribute name.