import导入整个包的一个问题

来源:7-9 __init__.py 的用法

leon787

2017-12-26

在看课程7-9的时候,碰到一个问题

文件夹的结构和老师的一样,就是名字不一样而已

//img.mukewang.com/szimg/5a4224ce0001512002340194.jpg

只能用from test.module1 import (a, b,  c, d)这样的才会算导入成功,而

from test import *

print(module3.a)

import test

print(module1.a)

都会报错

报错内容    

Traceback (most recent call last):

  File "module5.py", line 2, in <module>

    print(module1.a)

NameError: name 'module1' is not defined


如果改成

import test

print(test.module1.a)

报错就会变成

Traceback (most recent call last):

  File "module5.py", line 2, in <module>

    print(test.module1.a)

AttributeError: module 'test' has no attribute 'module1'


非常奇怪,我在test的__init__.py里面写了一句print('hello world')

这句话倒是会正常执行,不知道错在哪里,希望老师可以指点,谢谢。

写回答

2回答

慕田峪2402724

2017-12-28

这个问题我之前也发现了,通过尝试发现,发现如下可能的规则:import test 和 from test import *,只是导入包,都是只会执行init,不会导入包test里面的别的模块,如果需要导入具体的模块,那导入的表达式可以具体到具体模块名。或者在init文件里配置__all__=['模块名']来实现

1
1
leon787
好像是,所以我在__init__.py里面再import一下里面的模块,就可以直接import packet了
2017-12-29
共1条回复

7七月

2017-12-28

建议看下 * 号的用法,试试用 *导入模块儿,而不是导入 包

0
0

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14446 学习 · 4438 问题

查看课程