我在同一目录中有2个模块。我两次导入twitter
软件包。
在我的主要 TwitterAnalyzert.py 和 LibOverrider.py 中,我真的不喜欢这种解决方案。我想将其保存在单独的文件中,因为它可能会变得更大。
我先运行TwitterAnalyzert.py
,然后在twitter
模块中覆盖某些方法。
Do python modules get imported twice?
我找到了这个话题。答案:
When you do import math it is imported and put into sys.modules. Next you do import math it is checked if math is in sys.modules and fetched from there.
看看另一个主题,我不必担心两次导入。但是我感到有些不对劲。我想知道是否有任何结论。
为什么我必须导入每个文件?我在导入和执行twitter
之前先导入overrider()
,但仍然丢失了NameError: name 'twitter' is not defined
。
一次导入-> 失败
导入2次-> 可以并且可以正确覆盖
# Tree
.
|--Readme.md
|--\TwitterAnalyzer
|--LibOverrider.py
|--TwitterAnalyzer.py
|--__init__.py # empty file
# LibOverrider.py
import twitter # <-- I want to get rid of this
def overrider():
def show_user_items(self):
return self.__dict__.items()
twitter.User.items = show_user_items
print("Added twitter.User.items")
# TwitterAnalyzer.py
import twitter # <-- I import this firsts
import json
from LibOverrider import overrider
overrider() # <-- overriding methods in twitter module
... # rest of code
答案 0 :(得分:2)
导入模块有两件重要的事情:“加载”模块,并将其绑定到当前模块的名称空间。如果不在第二个模块中进行导入,那么第二个部分就是您所缺少的。因此,尽管twitter
模块仍然处于“加载”状态,但是LibOverrider
模块中的任何内容都不知道如何访问它。