• 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 的作用:

    1. 把目录变成模块
    2. 把目录加入到PYTHONPATH
    3. 可以对模块进行重命名(一种应用)
    4. 它的__all__属性可以控制导出的模块
  • 相关阅读:
    BTRON 八十年代日本夭折的操作系统。
    zz白话说学计算机图形学
    陈怀临时间–浅谈微内核QNX/Neutrino
    java封装详解
    maven基础学习为什么要用maven,帮助解决了什么问题,怎么解决的,希望以后学习每个知识点都可以这样问下自己
    vscode开发vue,热更新
    Vue.js到前端工程化
    简洁好用的数据库表结构文档生成工具
    Java的修饰符
    1.谷粒商城000前言
  • 原文地址:https://www.cnblogs.com/oaks/p/14275981.html
Copyright © 2020-2023  润新知