【问题标题】:make variable from global scope available to class after import导入后使全局范围内的变量可用于类
【发布时间】:2019-04-02 15:04:10
【问题描述】:

我试图避免重构一个类。目前它从全局范围内获取来自 argparse 的“args”,但是当我将这个类导入 unittest 时,当然 args 不存在。是否可以在导入后使该变量对类可用?在if __name__ == "__main__": 行下的unittest 文件中重新创建变量并不难。但是导入的类缺少该变量。是否有可能通过__dict__ 或其他技巧以某种方式将其放入其中?

一个简单的解决方案是让这个变量在实例化时显式地进入__init__,而不是从全局范围中获取它。在重构之前,我想先检查是否有办法在导入后将其放入其中,此时它通常从全局范围进入。干杯。

【问题讨论】:

  • 也许吧。代码究竟如何在全局范围内导入/赋值args

标签: python python-3.x import


【解决方案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之后做file1.__dict__['args'] = 'args'

import file1

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

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

【讨论】:

    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    • 2012-01-19
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多