Код: Выделить всё
class A:
vars()['x'] = 1
print(A.x) # Prints 1
Без аргумента vars() действует как locals() . Обратите внимание: словарь locals полезен только для чтения, поскольку обновления словаря locals игнорируются.
Это указывает на то, что обновления vars() не должны содержать каких-либо изменений. эффект, но, судя по приведенному выше примеру, они явно действуют. В документации для locals() аналогично указано:
Примечание. Содержимое этого словаря не следует изменять; изменения могут не повлиять на значения локальных и свободных переменных, используемых интерпретатором.
Это немного отличается от документации var(), поскольку в ней говорится об обновлениях. может не влиять на локальные переменные, тогда как в документации по vars() утверждается, что это вообще не влияет на локальные переменные.
Безопасно ли продолжать использовать переменные? () установить атрибуты класса? Или, делая это, я полагаюсь на неопределенное поведение?
Подробнее здесь: https://stackoverflow.com/questions/790 ... -attribute