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文件(这个文件定 ...
随机推荐
- 飘逸的python - hack输出流便于调试
当项目有很多文件时,要找出控制台的输出是在哪里print出来的很麻烦,不过这事对于强大的python来说小菜一碟. 先上代码和效果,再说明. import sys,traceback class my ...
- Android防止内存泄漏以及MAT的使用
Android发生内存泄漏最普遍的一种情况就是长期保持对Context,特别是Activity的引用,使得Activity无法被销毁.这也就意味着Activity中所有的成员变量也没办法销毁.本文仅介 ...
- NET基础课-- 类型基础(NET之美)
1.类型:值类型 引用类型. 分类依据:类型在内存的分配方式.值类型在堆栈,引用类型在托管堆. 名词:栈--所有变量都会被分配在栈上,只不过值类型直接含有数据,引用类型含有一个指向托管堆对象的地址. ...
- CLR via C# - 基础拾遗
编译器开关设置 IL代码质量 JIT本地代码质量 /optimize- /debug-(默认设置) 未优化 优化 /optimize- /debug+(full/pdbonly) 未优化 未优化 /o ...
- HTML\Script 去除关键字
以下是引用片段: ----- /**/ /// <summary> /// 去除HTML标记 /// </summary> /// <param name="N ...
- android 中使用缓存加载数据
最近app快完工了,但是很多列表加载,新闻咨询等数据一直从网络请求,速度很慢,影响用户体验,所以寻思用缓存来加载一些更新要求不太高的数据 废话不多说,上代码 欢迎转载,但请保留文章原始出处:) 博客 ...
- Toolbar 和 CollapsingToolbarLayout一起使用时menu item无点击反应解决办法
昨天一直在琢磨为什么Toolbar和CollapsingToolbarLayout一起使用时menu item无点击放应的原因,后来在stackoverflow上一条回答,说可能是Toolbar的背景 ...
- Code Review中应该关注的点
Magic number/string If statement, you should always use single line or brackets Provide default valu ...
- c#程序为PDF文件填写表单内容
众所周知,PDF文件一般情况下是无法修改的,如果你有一张现成的PDF表格,这时想通过编程实现从数据库或者动态生成内容去填写这张表格,就会有些问题了,首先我们要解决以下2个重要的问题: 1.如何将内容写 ...
- UVA 10253 Series-Parallel Networks (树形dp)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Series-Parallel Networks Input: standard ...