#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