parameters: (self, inst)
return_statement: return inst.execute_function_slots(names, name)
docstring: Checks for both __getattr__ and __getattribute__ methods
docstring_summary: Checks for both __getattr__ and __getattribute__ methods
docstring_tokens: Checks for both __getattr__ and __getattribute__ methods
function: def _check_getattr(self, inst):
          """Checks for both __getattr__ and __getattribute__ methods"""
          # str is important, because it shouldn't be `Name`!
          name = compiled.create_simple_object(self._evaluator, self._string_name)
  
          # This is a little bit special. `__getattribute__` is in Python
          # executed before `__getattr__`. But: I know no use case, where
          # this could be practical and where Jedi would return wrong types.
          # If you ever find something, let me know!
          # We are inversing this, because a hand-crafted `__getattribute__`
          # could still call another hand-crafted `__getattr__`, but not the
          # other way around.
          names = (inst.get_function_slot_names(u'__getattr__') or
                   inst.get_function_slot_names(u'__getattribute__'))
          return inst.execute_function_slots(names, name)
function_tokens: def _check_getattr ( self , inst ) : # str is important, because it shouldn't be `Name`! name = compiled . create_simple_object ( self . _evaluator , self . _string_name ) # This is a little bit special. `__getattribute__` is in Python # executed before `__getattr__`. But: I know no use case, where # this could be practical and where Jedi would return wrong types. # If you ever find something, let me know! # We are inversing this, because a hand-crafted `__getattribute__` # could still call another hand-crafted `__getattr__`, but not the # other way around. names = ( inst . get_function_slot_names ( u'__getattr__' ) or inst . get_function_slot_names ( u'__getattribute__' ) ) return inst . execute_function_slots ( names , name )