Python 中__init__.py 的作用
在python模块中导入模块,被导入的模块会成为该模块的子属性,例如创建一个python文件mypackage/side.py内容:
import os
那么在side这个模块里应该包含os,在创建一个文件mypackage/main.py内容:
from mypackage import side
print(side.os)
输出:
<module 'os' >
我们知道__init__.py 它还可以把它所在的文件夹变成一个模块,在这个模块被导入时自动执行,利用上面的特性可以实现模块重命名的效果,比如正常导入模块是:
from mypackage.model.user import Student
可以将Student类附加到model模块上,导入变成:
from mypackage.model import Student
model它是一个目录,目录中的__init__.py代表了model 这个模块,只要在这个里面导入Student, model 就有了Student 这个类。
新建一个文件mypackage/model/user.py内容为:
class Student:
    pass
class Teacher:
    pass
class internal:
    pass
在mypackage/model/__init__.py中添加:
from .user import Student, Teacher
在mypackage/main.py中写:
from mypackage.model import Student
print(Student)
执行输出:
<class 'mypackage.model.user.Student'>
如果把mypackage/main.py中的内容替换为:
from mypackage.model import *
print(Student)
print(Teacher)
执行后输出:
<class 'mypackage.model.user.Student'>
<class 'mypackage.model.user.Teacher'>
from mypackage.model import * 会把模块中所有的对象导入,通过__all__ 可以控制导出的属性,比如希望只导出Student,在mypackage/model/__init__.py 写入:
from .user import Student, Teacher
__all__ = ['Student']
再执行mypackage/main.py输出为:
Traceback (most recent call last):
  File "/mypackage/main.py", line 4, in <module>
    print(Teacher)
NameError: name 'Teacher' is not defined
<class 'mypackage.model.user.Student'>
总结一下__init__.py 的作用:
- 把目录变成模块
- 把目录加入到PYTHONPATH
- 可以对模块进行重命名(一种应用)
- 它的__all__属性可以控制导出的模块
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号