сделать переменную из глобальной области доступной классу после импорта

#python #python-3.x #import

#python #python-3.x #импорт

Вопрос:

Я пытаюсь избежать рефакторинга класса. На данный момент он получает ‘args’, который поступает из argparse из глобальной области, но когда я импортирую этот класс в unittest, конечно, аргументов там нет. Возможно ли сделать эту переменную доступной классу после импорта? Нетрудно воссоздать переменную в файле unittest под if __name__ == "__main__": строкой. Но в импортированном классе отсутствует эта переменная. Возможно ли каким-то образом вставить ее туда с помощью __dict__ или какого-то другого трюка?

Простым решением было бы явно ввести эту переменную в __init__ при создании экземпляра, а не извлекать ее из глобальной области. Перед рефакторингом я хотел сначала проверить, есть ли способ получить ее там после импорта, когда она обычно поступает из глобальной области. Приветствия.

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

1. Возможно. Как именно код импортируется / присваивается args в глобальной области?

Ответ №1:

Как вы и предлагали, обновление __dict__ может быть решением. Если ваш код похож на этот:

file1.py :

 class Class:
    def foo(self):
        print(args)


if __name__ == '__main__':
    args = 'args'
    c = Class()
    c.foo()  # OK
  

file.2py :

 import file1

c = file1.Class()
c.foo()  # will raise NameError
  

Затем сделайте file1.__dict__['args'] = 'args' после импорта file1 :

 import file1

file1.__dict__['args'] = 'args'

c = file1.Class()
c.foo()  # will print args without errors