Как получить атрибуты класса, не вызывая его?

#python #class #attributes #eval

Вопрос:

Например, у меня есть строка (не загруженный код):

 class InfoClass:
    INFO = "Required info"
    
    def __init__(self):
        # Unsafe code, which can be executed
 

Есть ли какой-либо способ получить информацию из инфокласса без регулярного выражения, не выполняя инициализацию или что-либо еще?

Ответ №1:

 InfoClass.INFO # returns value.
 

Комментарии:

1. В другом коде может содержаться небезопасное (вредоносное ПО). Я не могу просто оценить это

2. Попробуйте записать значение атрибута в файл с помощью python

Ответ №2:

Решение: используйте ast.parse https://docs.python.org/3/library/ast.html#ast.parse

 import ast

code = """
class InfoClass:
    INFO = "Required info"
"""

ast.parse(code).body[0].body[0].value.value
 

Вывод: Необходимая информация