gpt4 book ai didi

python - python中的import关键字实际上是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 19:36:45 30 4
gpt4 key购买 nike

假设我有 3 个文件:

一个.py

from d import d

class a:
def type(self):
return "a"
def test(self):
try:
x = b()
except:
print "EXCEPT IN A"
from b import b
x = b()
return x.type()

b.py
import sys

class b:
def __init__(self):
if "a" not in sys.modules:
print "Importing a!"
from a import a
pass
def type(self):
return "b"
def test(self):
for modules in sys.modules:
print modules
x = a()
return x.type()

py
from b import b
import sys

x = b()
print x.test()

并运行 python c.py

Python 回来提示:

NameError: global name 'a' is not defined



但是,sys.modules 中有一个 IS:
copy_reg
sre_compile
locale
_sre
functools
encodings
site
__builtin__
operator
__main__
types
encodings.encodings
abc
errno
encodings.codecs
sre_constants
re
_abcoll
ntpath
_codecs
nt
_warnings
genericpath
stat
zipimport
encodings.__builtin__
warnings
UserDict
encodings.cp1252
sys
a
codecs
os.path
_functools
_locale
b
d
signal
linecache
encodings.aliases
exceptions
sre_parse
os

我可以改变 b.py 使得:

x = a()
更改为
x = sys.modules["a"].a()

python 会很高兴地运行它。

由此产生了几个问题:

为什么 python 在 sys.modules 中时说它不知道 a 是什么?
使用 sys.modules 是访问类和函数定义的“正确”方式吗?
导入模块的“正确”方法是什么?
IE
从模块导入 x
或者
导入模块

最佳答案

我想这是范围界定的问题,如果您在构造函数中导入模块,则只能在导入语句之后在构造函数中使用它。

关于python - python中的import关键字实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3094506/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com