【发布时间】:2020-12-05 01:00:32
【问题描述】:
我是 Python 的新手,但我对其他编程语言很有经验。
我有这行代码:
import module as m
如果我尝试访问它的功能:
m.spam.foo()
m.eggs.bar()
我收到以下错误:
AttributeError: module 'module' has no attribute 'spam'
AttributeError: module 'module' has no attribute 'eggs'
另一方面,如果我写:
import module.spam, module.eggs
然后:
module.spam.foo()
module.eggs.bar()
它工作正常。
如果我写也一样:
from module import spam, eggs
和:
spam.foo()
eggs.bar()
正常工作。
我更喜欢第一种方法,因为在使用它之前我不必手动import 每个子模块...
那么,这种方法有什么问题?有没有办法让它工作(我不喜欢from module import * 方法,因为它们可能与我的全局变量混淆)?
我在参考资料中到处搜索,但找不到任何东西。
【问题讨论】:
-
在开头导入所有模块是PEP 8 - Style Guide for Python Code 中推荐的技术——当然也有例外。
-
谢谢...我不知道!无论如何,它并不能解决我必须手动导入每个子模块的事实
-
如果您的问题是关于 Python 包中的子模块,您可以在包的
__init__.py文件中的子模块中import东西。通常这将需要显式导入所有内容。但是,有一些方法可以自动执行此操作(如果您有兴趣,我已经回答了其他问题,展示了如何执行此操作)。 -
@martineau 这个文件
__init__.py是自动包含在每个第三方库中还是应该手动创建? -
随包一起提供,因为它是使它们成为一个包的重要组成部分。我认为您应该在文档(或其他 Python 资源)中查找“包”。另请参阅我对How to import members of all modules within a package?的回答
标签: python function import module compiler-errors