如何在 Python 中使 `import` 和 `from import` 产生分歧?

问题描述 投票:0回答:1

假设我在 python 代码库中有以下连续行:

from foo import BAR          # succeeds
log.info(f"{dir(BAR)=}")     # succeeds
import foo.BAR               # succeeds
log.info(f"{dir(foo.BAR)=}") # fails, AttributeError no field BAR in module foo

中间没有其他代码。如果我刻意想要创造这样的效果,我会怎么做呢?我知道这是可能的,因为我正在 Python 3.11 下运行的大型代码库中观察它,但我不知道如何进行。 python 导入系统的什么功能让这两种形式的导入有所不同? 似乎

import foo.BAR
的能力必须要求
foo.BAR
存在,我们甚至首先使用
from foo import BAR
确认它存在并记录 的字段
BAR

foo/__init__.py
存在且为空。
foo/BAR.py
存在并包含顶级项目,例如函数和类。

python python-import attributeerror
1个回答
0
投票

foo.BAR
需要是 模块 才能使
import foo.BAR
工作。
如果
BAR
foo
attribute
,则不会。例如:

# foo.py
BAR = 'baz'

您不能

import foo.BAR
以上。但是,您可以
from foo import BAR
以上。

© www.soinside.com 2019 - 2024. All rights reserved.