Я пытаюсь переопределить глобальные переменные, чтобы любое имя атрибута
то, что не существует, возвращает себя (строка имени).
Причина этого в том, чтобы использовать его в eval для быстрого / хакерского анализа списка инициализаторов c (и просто потому, что он есть).
Мой код:
class EvalGlobalsDict(dict):
def __getattr__(self, name):
if hasattr(self, name):
return super(EvalGlobalsDict, self).__getattr__(name)
else:
return name
eval_globals = EvalGlobalsDict(globals())
Всякий раз, когда я пытаюсь вывести несуществующее имя, оно выдает мне NameError
eval("aaa",eval_globals)
И если я попытаюсь напрямую позвонить
eval("globals().__getattr__("dir")",eval_globals)
eval("globals().__getattr__("dir")",eval_globals)
Я получаю только строку имени attr даже для действительных атрибутов.
Что я делаю не так?