• 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__属性可以控制导出的模块
  • 相关阅读:
    Django 数据库常用字段类型、选项参数、外键约束
    Django 项目基础配置
    MySQL连接列值
    SQL 限制查询结果
    python+appium+真机测试
    P3089 [USACO13NOV]POGO的牛Pogo-Cow
    P2889 [USACO07NOV]挤奶的时间Milking Time
    P2679 子串
    P3932 浮游大陆的68号岛
    P1514 引水入城
  • 原文地址:https://www.cnblogs.com/oaks/p/14275981.html
Copyright © 2020-2023  润新知