网上关于__init__.py的作用的资料到处都是,我在此就不再啰嗦哪些了。

若有需要、请各位看官去搜搜即可。

最近刚开始用Python3 就遇到了这个比较有意思的事情

闲言少叙,下面要介绍的是python3中__init__.py中的一些略微不同的地方

目录结构如下:

├── mdl
│ ├── __init__.py
│ ├── bar.py
│ └── foo.py
└── test.py

文件内容,从上至下,依次为

mdl/__init__.py:

#encoding:utf-8

from .foo import Foo    #python2、3都适用
from .bar import Bar #python2、3都适用
#from mdl.foo import Foo #python2、3都适用
#from mdl.bar import Bar #python2、3都适用
#from foo import Foo #python3不适用
#from bar import Bar #python3不适用

mdl/bar.py:

class Bar():
def __init__(self):
pass

mdl/foo.py

class Foo():
def __init__(self):
pass

test.py

from mdl.foo import Foo
from mdl.bar import Bar
f = Foo()
b = Bar()

大家看到的贴的代码,可能就知道我所要说的是什么意思了吧……

对,没错。

之前在我们使用python2的时候(至少从python2.6之后是这样),我们通常将__init__.py置空(PS:置空的话,与python3也可以通用)或者直接(如下图所示)

from foo import Foo
from bar import Bar

然后可以正常地愉快地使用python test.py,没有任何报错信息。

但是在python3的时候(至少从python3.4之后是这样),我们这么来做

from foo import Foo
from bar import Bar

运行python test.py发现出错了,囧……

ImportError: No module named 'foo'

别的我也不多说了,我想大家也都看明白了

建议,大家之后都使用这种方式(通用用法)

from .foo import Foo
from .bar import Bar

【附录】

1、在python2来运行程序(即python test.py)之后,发现

├── mdl
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── bar.py
│   ├── bar.pyc
│   ├── foo.py
│   └── foo.pyc
└── test.py

(对,我们很常见的.pyc出现了)

2、在python3来运行程序之后,发现

├── mdl
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-34.pyc
│   │   ├── bar.cpython-34.pyc
│   │   └── foo.cpython-34.pyc
│   ├── bar.py
│   └── foo.py
└── test.py

(看到了不同了吧……)

python3 module中__init__.py的需要注意的地方的更多相关文章

  1. Python自定义Module中__init__.py文件介绍

    ./pyModuleTest/├── addutil│   ├── add.py│   ├── add.pyc│   ├── __init__.py│   ├── __init__.pyc│   └─ ...

  2. Python模块包中__init__.py文件的作用

    转载自:http://hi.baidu.com/tjuer/item/ba37ac4ce7482a0f6dc2f08b 模块包: 包通常总是一个目录,目录下为首的一个文件便是 __init__.py. ...

  3. python中__init__.py文件的作用

    问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...

  4. 转载:【学习之家】Python中__init__.py文件的作用

    Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...

  5. Python包中 __init__.py文件的作用

    原创连接 https://www.cnblogs.com/AlwinXu/p/5598543.html Python包中 __init__.py文件的作用 在创建python包的过程中,IDE都会在包 ...

  6. Python中__init__.py文件的作用详解

    转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...

  7. python包中__init__.py文件的作用

    python包中__init__.py文件的作用 __init__.py文件最常用的作用是标识一个文件夹是一个 python包. __init__.py文件的另一个作用是定义模糊导入时要导入的内容. ...

  8. Module、__init__.py 文件解析

    一.什么是Module? 一个python Module就是一个模块,本质就是一个.py文件,其中包含了python对象的定义和python语句. 在模块内部,模块名存储在全局变量__name__中, ...

  9. pydev package包中__init__.py作用

    Eclipse用pydev,新建一个pydev package时,总会自动地生成一个空的__init__.py文件. 原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定 ...

随机推荐

  1. 飘逸的python - hack输出流便于调试

    当项目有很多文件时,要找出控制台的输出是在哪里print出来的很麻烦,不过这事对于强大的python来说小菜一碟. 先上代码和效果,再说明. import sys,traceback class my ...

  2. Android防止内存泄漏以及MAT的使用

    Android发生内存泄漏最普遍的一种情况就是长期保持对Context,特别是Activity的引用,使得Activity无法被销毁.这也就意味着Activity中所有的成员变量也没办法销毁.本文仅介 ...

  3. NET基础课-- 类型基础(NET之美)

    1.类型:值类型  引用类型. 分类依据:类型在内存的分配方式.值类型在堆栈,引用类型在托管堆. 名词:栈--所有变量都会被分配在栈上,只不过值类型直接含有数据,引用类型含有一个指向托管堆对象的地址. ...

  4. CLR via C# - 基础拾遗

    编译器开关设置 IL代码质量 JIT本地代码质量 /optimize- /debug-(默认设置) 未优化 优化 /optimize- /debug+(full/pdbonly) 未优化 未优化 /o ...

  5. HTML\Script 去除关键字

    以下是引用片段: ----- /**/ /// <summary> /// 去除HTML标记 /// </summary> /// <param name="N ...

  6. android 中使用缓存加载数据

    最近app快完工了,但是很多列表加载,新闻咨询等数据一直从网络请求,速度很慢,影响用户体验,所以寻思用缓存来加载一些更新要求不太高的数据 废话不多说,上代码 欢迎转载,但请保留文章原始出处:)  博客 ...

  7. Toolbar 和 CollapsingToolbarLayout一起使用时menu item无点击反应解决办法

    昨天一直在琢磨为什么Toolbar和CollapsingToolbarLayout一起使用时menu item无点击放应的原因,后来在stackoverflow上一条回答,说可能是Toolbar的背景 ...

  8. Code Review中应该关注的点

    Magic number/string If statement, you should always use single line or brackets Provide default valu ...

  9. c#程序为PDF文件填写表单内容

    众所周知,PDF文件一般情况下是无法修改的,如果你有一张现成的PDF表格,这时想通过编程实现从数据库或者动态生成内容去填写这张表格,就会有些问题了,首先我们要解决以下2个重要的问题: 1.如何将内容写 ...

  10. UVA 10253 Series-Parallel Networks (树形dp)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Series-Parallel Networks Input: standard ...