-> Class.__dict__['attr'].__get__(instance, Class) attr in instance.__dict__ -> instance.__dict__['attr'] attr in Class.__dict__ and attr is not a data descriptor -> Class.__dict__['attr'].__get__(instance, Class) attr in Class.__dict__ -> Class.__dict__['attr'] Class.__getattr__ exists -> Class.__getattr__('attr') 3 . 2