python精要(78)-模块与包组织(1)-绝对导入

1、每个目录下需要建立一个__iniit__.py的文件,空文件也可以,这样才可以引入该目录下的模块。
2、__init__.py 文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在
3、目录名就是包名
4、__all__from ... import *的情况下使用
目录组织如下:

m1
    --__init__.py
    --test1.py
    --m2
        --__init__py
        --test2.py
>>> import m1.test1
>>> m1.test1.test1()
m1.test1
>>> from m1.test1 import test1
>>> test1()
m1.test1
>>> from m1 import test1
>>> test1.test1()
m1.test1
>>> print(m1.__name__)
m1

>>> print(m1.test1.__name__)
m1.test1



>>> from m1.m2 import test2
>>> test2.test2()
m1.m2.test2
>>> import m1.m2
>>> m1.m2.test2.test2()
m1.m2.test2
>>> import m1.m2.test2
>>> m1.m2.test2.test2()
m1.m2.test2
>>> from m1.m2.test2 import test2
>>> test2()
m1.m2.test2
>>> 
>>> import m1.test1 as t1
>>> t1.test1()
m1.test1

包下的__init__.py文件内容为空,导入包是无法使用的

>>> from m1 import *
>>> m1.test1.test1()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'm1' has no attribute 'test1'
>>> 

下面来为__init__.py写内容

(base) [myhaspl@localhost m1]$ pwd
/home/myhaspl/learn/learnpy/learn2/m1
(base) [myhaspl@localhost m1]$ cat __init__.py
import m1.test1
(base) [myhaspl@localhost m1]$ 

>>> import m1
>>> m1.test1.test1()
m1.test1
(base) [myhaspl@localhost learn2]$ cat ./m1/m2/__init__.py
import m1.m2.test2
(base) [myhaspl@localhost learn2]$ 
>>> import m1.m2
>>> m1.m2.test2
<module 'm1.m2.test2' from '/home/myhaspl/learn/learnpy/learn2/m1/m2/test2.py'>
>>> m1.m2.test2.test2()
m1.m2.test2

在m1目录下再加入test11.py
然后,修改m1/__init__.py,加入__all__以及test11.py

(base) [myhaspl@localhost learn2]$ cat m1/__init__.py
import  m1.test1
import  m1.test11
__all__ = ["test1","test11"]

>>> from m1 import *
>>> test1
<module 'm1.test1' from '/home/myhaspl/learn/learnpy/learn2/m1/test1.py'>
>>> test11
<module 'm1.test11' from '/home/myhaspl/learn/learnpy/learn2/m1/test11.py'>
>>> 

接着,修改m2目录的__init__.py文件。

(base) [myhaspl@localhost learn2]$ cat m1/m2/__init__.py
import m1.m2.test2
__all__=["test2"]
(base) [myhaspl@localhost learn2]$ 
>>> from m1.m2 import *
>>> test2
<module 'm1.m2.test2' from '/home/myhaspl/learn/learnpy/learn2/m1/m2/test2.py'>
>>> 
相关推荐
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页