在其他文件中是否需要导入相同的模块?

2024-04-19 10:12:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模块,都在同一个目录下。我正在导入twitter包两次。 在我的mainTwitterAnalyzert.py和LibOverrider.py中,我真的不喜欢这个解决方案。我想把它分开存放,因为它可能会变大。

我首先运行TwitterAnalyzert.py,然后重写twitter模块中的一些方法

Do python modules get imported twice?

I found this topic. Answer: 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.

看看另一个话题,我不必担心导入两次。但我觉得有些事情不对。我想知道这是否有什么结论

为什么我必须在每个文件中导入?我在导入和执行overrider()之前导入了twitter,但它仍然丢失了: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

Tags: 模块pyimportyoumodulesgetisitems
1条回答
网友
1楼 · 发布于 2024-04-19 10:12:23

导入模块有两件重要的事情:它“加载”模块,并将其绑定到当前模块的名称空间。如果不在第二个模块中进行导入,那么第二个部分就是您所缺少的。因此,尽管twitter模块仍处于“加载”状态,LibOverrider模块中的任何内容都不知道如何访问它

相关问题 更多 >