网上关于__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. [Redux] Extracting Action Creators

    We will create an anction creator to manage the dispatch actions, to keep code maintainable and self ...

  2. boost::asio 的同、异步方式

    转自:http://blog.csdn.net/zhuky/archive/2010/03/10/5364574.aspx Boost.Asio是一个跨平台的网络及底层IO的C++编程库,它使用现代C ...

  3. 设计模式12---设计模式之代理模式(Proxy)(结构型)

    1.场景模拟 考虑这样一个实际应用: HR提出,当选择一个部门或者是分公司的时候,要把所有的分公司下的员工显示出来,而且不要翻页,方便进行业务处理,只需要显示姓名即可,但是点击姓名会出现这位员工的详细 ...

  4. html_day4+css

    表单控件共有的属性: enabled:表示表单控件可用 disabled:表示表单控件被禁用 readonly:表示表单控件只能读name属性值的作用: 需要将表单的数据提交到服务器处理就要写name ...

  5. 一个很经典的this面试题

    !function(){ this.length = 10; var fn = function(){ console.log(this.length); //输出多少? }, arr = [fn, ...

  6. FFMPEG视音频解码【一】

    多媒体的时代,得多了解点编解码的技术才行,而ffmpeg为我们提供了一系列多媒体编解码的接口,如何用好这些接口达到自己所需要的目的,这也是一门重要的学问. 要是了解得不够,总是会遇到一堆又一堆问题:网 ...

  7. 1217.1——OC准备

    #import 与 #include区别 include完成头文件的导入,可能会导致头文件的相互引用和函数或变量的重复定义 为了解决这个问题 我们必须这样做 #ifndef Student_h #de ...

  8. uva 1595 Symmetry“结构体”

    给出平面上N(N<=1000)个点.问是否可以找到一条竖线,使得所有点左右对称,如图所示: 则左边的图形有对称轴,右边没有.   Sample Input  3 5 -2 5 0 0 6 5 4 ...

  9. (转) Class

    Classes are an expanded concept of data structures: like data structures, they can contain data memb ...

  10. cobbler之详细配置

    目录 作用 组件 命令 安装过程     安装包     配置文件     启动cobbler服务     配置cobbler服务     使用cobbler_web 作用:系统自动化安装,支持lin ...