“导入模块”和“从模块导入”之间有什么区别

2024-09-26 22:12:38 发布

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

我是python新手,试图理解“import module”和“from module import*”之间的区别。我认为两者都是相同的,因为它们从模块中导入了所有函数,但没有看到。我的困惑源于下面的代码——

import abc
class Minnn(ABC):
    @abstractmethod
    def calculate(self, x):
        pass  # empty body, no c

当我运行时,我得到以下错误:“NameError:name'ABC'is not defined”。当我将第一个导入行替换为“from abc import*”时,它就工作了。为什么这会造成不同呢


Tags: 模块函数代码fromimportdefclassmodule
1条回答
网友
1楼 · 发布于 2024-09-26 22:12:38

导入模块会将单个符号添加到命名空间中,但您可以从中引用导出的对象:

# simple import
import abc

abc.ABC
abc.ABCMeta

# renamed via "as"
import abc as module
module.ABC
module.ABCMeta

当您import *时,您正在将从该模块导出的所有符号添加到当前命名空间中,因此您可以直接引用它们,而不必使用模块前缀:

#### YOU PROBABLY SHOULD NOT DO THIS
from abc import *
####

ABC
ABCMeta

如果你是黑客在一个外壳或笔记本;不是什么大不了的。但是生产代码不应该这样做。你知道吗

相关问题 更多 >

    热门问题