python3 module中__init__.py的需要注意的地方
网上关于__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的需要注意的地方的更多相关文章
- Python自定义Module中__init__.py文件介绍
./pyModuleTest/├── addutil│ ├── add.py│ ├── add.pyc│ ├── __init__.py│ ├── __init__.pyc│ └─ ...
- Python模块包中__init__.py文件的作用
转载自:http://hi.baidu.com/tjuer/item/ba37ac4ce7482a0f6dc2f08b 模块包: 包通常总是一个目录,目录下为首的一个文件便是 __init__.py. ...
- python中__init__.py文件的作用
问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...
- 转载:【学习之家】Python中__init__.py文件的作用
Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...
- Python包中 __init__.py文件的作用
原创连接 https://www.cnblogs.com/AlwinXu/p/5598543.html Python包中 __init__.py文件的作用 在创建python包的过程中,IDE都会在包 ...
- Python中__init__.py文件的作用详解
转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...
- python包中__init__.py文件的作用
python包中__init__.py文件的作用 __init__.py文件最常用的作用是标识一个文件夹是一个 python包. __init__.py文件的另一个作用是定义模糊导入时要导入的内容. ...
- Module、__init__.py 文件解析
一.什么是Module? 一个python Module就是一个模块,本质就是一个.py文件,其中包含了python对象的定义和python语句. 在模块内部,模块名存储在全局变量__name__中, ...
- pydev package包中__init__.py作用
Eclipse用pydev,新建一个pydev package时,总会自动地生成一个空的__init__.py文件. 原来在python模块的每一个包中,都有一个__init__.py文件(这个文件定 ...
随机推荐
- 函数nvl,nvl2,nullif,coalesce
NVL: Converts a null value to an actual valueNVL2:If expr1 is not null, NVL2 returns expr2. If expr1 ...
- 关于select元素的一些基本知识
为select元素绑定值的几个方法: 一.通过字符串拼接,让后追加到select元素下, 二.通过DOM创建option元素,为其绑上value值和文本: function loadProvinve( ...
- EF搭建可扩展菜单
EF实现可扩展性菜单 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !impo ...
- iOS_ @property参数分析
@propert的相关参数 因为现在Xcode都是默认使用ARC所以现在分析主要是以ARC为主. 1.@property有哪些参数? 第一组: 内存管理特性 retain assign copy ...
- 使用do...while的方法输入一个月中所有的周日
do{ var date = Number(prompt('请输入一个月的总天数')); var start = (prompt('请输入一个月的一号是周几')); for(var i=0;i< ...
- 网络编程之UDP
UDP编程流程:一服务端:1.创建socket. DatagramSocket socket = new DatagramSocket(8878); 2.创建数据包,用来接收发送的数据包.byte[ ...
- C++服务器设计(五):多设备类型及消息事件管理
在传统的服务器系统中,服务器仅针对接收到的客户端消息进行解析,并处理后回复响应.在该过程中服务器并不会主动判断客户端类型.但在现实中,往往存在多种类型的客户端设备,比如物联网下的智能家居系统,就存在智 ...
- 9、Khala实现0.01版QQ
这次来个有界面的. 登录界面: 主界面: 1.服务端开发: 只需创建一个类ChatType(./examples/HelloKhala/src/ChatType.cpp),在该类型中,核心为创建的两个 ...
- https://github.com/aptana/studio3/releases aptana
https://github.com/aptana/studio3/releases aptana
- python运维开发(二十)----models操作、中间件、缓存、信号、分页
内容目录 select Form标签数据库操作 models操作F/Q models多对多表操作 Django中间件 缓存 信号 分页 select Form标签补充 在上一节中我们可以知道Form标 ...