Python中__init__.py定义的函数调用失败问题求助
解决NameError: name 'print_hello' is not defined问题
你的问题出在模块导入的命名空间逻辑上:当执行import module1时,模块对象被成功导入,但模块内的函数并没有直接进入全局命名空间,必须通过模块名访问,或者显式导入函数。
三种可行的解决办法:
1. 通过模块名调用函数
修改main.py代码:
import module1 module1.print_hello()
2. 直接导入目标函数
修改main.py代码:
from module1 import print_hello print_hello()
3. 导入模块所有公开成员(利用你定义的__all__)
修改main.py代码:
from module1 import * print_hello()
你在__init__.py里定义的__all__ = ["print_hello"],作用就是限定import *时会导入的成员,刚好匹配你的需求。
补充说明
你看到Init loaded被打印,是因为Python在导入模块时会执行__init__.py里的所有顶层代码,这说明模块确实被成功加载了,只是函数没被导入到当前可直接调用的命名空间里。
内容的提问来源于stack exchange,提问作者Roman Toasov
相关产品推荐
相关产品推荐

