我可以使用__init__.py定义全局变量吗?

发布于 2021-01-29 19:04:49

我想定义一个常量,该常量应该在包的所有子模块中可用。我以为最好的地方__init__.py在根包的文件中。但是我不知道该怎么做。假设我有几个子包,每个子包都有几个模块。如何从这些模块访问该变量?

当然,如果这是完全错误的,并且有更好的替代方法,我想知道。

关注者
0
被浏览
70
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您应该能够将它们放入__init__.py。这一直都在做。

    mypackage/__init__.py

    MY_CONSTANT = 42
    

    mypackage/mymodule.py

    from mypackage import MY_CONSTANT
    print "my constant is", MY_CONSTANT
    

    然后,导入mymodule:

    >>> from mypackage import mymodule
    my constant is 42
    

    不过,如果您确实有常量,则将它们放入单独的模块(constants.py,config.py,…),然后将其放入包名称空间中是合理的(可能是最佳实践),然后导入他们。

    mypackage/__init__.py

    from mypackage.constants import *
    

    尽管如此,这并不会自动在包模块的名称空间中包含常量。包中的每个模块仍然必须从mypackage或从中显式导入常量mypackage.constants



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看