Python 是否需要在其他文件中导入相同的模块?
我有两个模块,都在同一个目录中。我正在两次导入Python 是否需要在其他文件中导入相同的模块?,python,Python,我有两个模块,都在同一个目录中。我正在两次导入twitter包。 在我的mainTwitterAnalyzert.py和LibOverrider.py中,我真的不喜欢这个解决方案。我想把它保存在不同的文件中,因为它可能会变得更大 我首先运行TwitterAnalyzert.py,然后覆盖twitter模块中的一些方法 我找到了这个话题。回答:当您导入数学时,它被导入并放入sys.modules。接下来,您将导入math,它将检查math是否在sys.modules中并从那里获取。 看看另一个话
twitter
包。
在我的mainTwitterAnalyzert.py和LibOverrider.py中,我真的不喜欢这个解决方案。我想把它保存在不同的文件中,因为它可能会变得更大
我首先运行TwitterAnalyzert.py,然后覆盖twitter模块中的一些方法
我找到了这个话题。回答:当您导入数学时,它被导入并放入sys.modules。接下来,您将导入math,它将检查math是否在sys.modules中并从那里获取。
看看另一个话题,我不必担心导入两次。但我有种感觉有些不对劲。我不知道这是否有什么结论
为什么我必须在每个文件中导入?在导入和执行overrider()
之前,我导入了twitter
,但仍然缺少它:NameError:没有定义名称“twitter”
导入一次-->失败
导入2次-->正常并正确覆盖
# Tree
.
|--Readme.md
|--\TwitterAnalyzer
|--LibOverrider.py
|--TwitterAnalyzer.py
|--__init__.py # empty file
#LibOverrider.py
导入twitter#导入模块有两件重要的事情:它“加载”模块,并将其绑定到当前模块的命名空间。如果不在第二个模块中进行导入,那么第二个部分就是您缺少的部分。因此,尽管twitter
模块仍处于“加载”状态,但LibOverrider
模块中的任何内容都不知道如何访问它。导入模块有两件重要的事情:它“加载”模块,并将其绑定到当前模块的命名空间。如果不在第二个模块中进行导入,那么第二个部分就是您缺少的部分。因此,尽管twitter的twitter
模块仍然“加载”,LibOverrider
模块中的任何内容都不知道如何访问它。您需要导入,以便在当前模块中定义导入的名称。您的LibOverrider.py
中需要导入import
,因为它无法知道什么是twitter
。由于名称错误
,它将在LibOverrider import overrider的点失败。除非在包含twitter
的命名空间中定义了overrider
,否则您需要在模块中专门进行导入。您需要导入,以便在当前模块中定义导入的名称。在LibOverrider.py
中需要导入import
,因为它无法知道是什么twitter
。由于名称错误
,它将在LibOverrider import overrider的点失败。除非在包含twitter
的命名空间中定义了overrider
,否则您需要在模块中专门进行导入。确定。谢谢,这就解释了一切。看起来导入是绑定namespace.Ok的最简单方法。谢谢,这就解释了一切。看起来导入是绑定命名空间的最简单方法。
# 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