V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
IurNusRay
V2EX  ›  Python

关于 Python 文件夹中__init__.py 的作用

  •  
  •   IurNusRay · 2021-01-20 17:44:51 +08:00 · 3293 次点击
    这是一个创建于 1405 天前的主题,其中的信息可能已经有所发展或是发生改变。
    [![sWTXpd.png]( https://s3.ax1x.com/2021/01/20/sWTXpd.png)]( https://imgchr.com/i/sWTXpd)

    如图,好像有没有__init__.py 并不影响什么啊,不懂网上一大堆说的__init__.py 将文件夹标记为 python 包是什么意思
    20 条回复    2021-01-22 14:06:28 +08:00
    krixaar
        1
    krixaar  
       2021-01-20 17:50:14 +08:00
    你在__init__.py 里加一行 print('This is __init__.py') ,然后再运行一下试试。
    zachlhb
        2
    zachlhb  
       2021-01-20 17:52:59 +08:00 via Android
    做初始化操作的
    cjq8z
        3
    cjq8z  
       2021-01-20 17:54:55 +08:00 via Android
    类这些初始化需要这语句。
    monsterxx03
        4
    monsterxx03  
       2021-01-20 17:56:54 +08:00
    在 python2 里文件夹里必须要有 __init__.py 文件在能被当成包 import , python3 里不是必须,只有在包被 import 时候执行的时候才需要
    IurNusRay
        5
    IurNusRay  
    OP
       2021-01-20 17:57:47 +08:00
    @krixaar 都能正常导入执行的,难道是 python3 已经不需要__init__.py 就可以导入文件夹了吗
    acmore
        6
    acmore  
       2021-01-20 17:58:25 +08:00
    另一个常见的用法:暴露出内部的接口和成员,供外部调用。
    使用得当可以减少很多记忆接口和排查循环引用的心智负担。
    IurNusRay
        7
    IurNusRay  
    OP
       2021-01-20 17:59:38 +08:00
    ![image]( https://imgchr.com/i/sWbpFS)

    上图是我的情况
    IurNusRay
        8
    IurNusRay  
    OP
       2021-01-20 18:01:55 +08:00
    @monsterxx03 是指执行包里面的.py 文件里面的函数吗
    monsterxx03
        9
    monsterxx03  
       2021-01-20 18:04:37 +08:00
    @IurNusRay 意思是 __init__ .py 里的代码会在包被 import 的时候自动执行, 自己试一下就知道了
    NeezerGu
        10
    NeezerGu  
       2021-01-20 18:09:34 +08:00
    https://stackoverflow.com/questions/448271/what-is-init-py-for

    都不需要你会英语,谷歌翻译看就行。
    请使用谷歌搜索以解决国内各种野鸡教程的问题
    xiri
        11
    xiri  
       2021-01-20 18:36:31 +08:00
    比如我有一个 a 文件夹,里面有一个 b.py 文件,里面写了一个 c 函数(供外部调用的)
    我的一般做法是在 a 文件夹的__init__ .py 里面写一个 from .b import c
    然后其他文件中需要调用 c 函数的时候只需要 from a import c
    如果没有__init__ .py ,要调用 c 函数的话需要 from a.b import c

    就像楼上说的,__init__ .py 里的代码会在包被 import 的时候自动执行,在 python3.3 之前必须要这个文件才能将文件夹识别为 python 包,但是现在已经不强制需要了
    renmu123
        12
    renmu123  
       2021-01-20 20:51:34 +08:00 via Android
    IurNusRay
        13
    IurNusRay  
    OP
       2021-01-21 09:08:22 +08:00
    @NeezerGu 哈哈,谢谢,我测了半天,明明不需要__init__.py 也能导入,现在明白了
    IurNusRay
        14
    IurNusRay  
    OP
       2021-01-21 09:08:38 +08:00
    @xiri 恩,懂了,谢谢
    huyujievip
        15
    huyujievip  
       2021-01-21 10:45:48 +08:00 via Android
    老哥的 vsc 主题是什么?好漂亮呀
    ppxpps
        16
    ppxpps  
       2021-01-21 10:52:36 +08:00
    @huyujievip 感觉是 pycharm
    huyujievip
        17
    huyujievip  
       2021-01-21 10:58:08 +08:00 via Android
    @ppxpps 哈哈哈,我看了一下,是 pycharm,原来 pycharm 也有这么漂亮的 theme
    IurNusRay
        18
    IurNusRay  
    OP
       2021-01-21 11:01:29 +08:00
    @huyujievip 用的是 pycharm,下载了个主题插件"Material"
    xiaoHuang3
        19
    xiaoHuang3  
       2021-01-22 12:35:01 +08:00
    @IurNusRay 为啥我刚装的"Material"跟你的不一样 TAT,我的太丑了,感觉都没生效
    IurNusRay
        20
    IurNusRay  
    OP
       2021-01-22 14:06:28 +08:00
    @xiaoHuang3 不会吧,安装完重启就会默认用这个主题了,或者换个主题试试,settings--->Appearence--->Material Theme 里面看看
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3019 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:33 · PVG 22:33 · LAX 06:33 · JFK 09:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.