网上关于__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

(看到了不同了吧……)

最新文章

  1. 4-Server安全配置
  2. C# Double保留小数点后面位数
  3. Netfilter&iptables:如何理解连接跟踪机制?
  4. 曲面Shader
  5. 小波变换和motion信号处理(三)(转)
  6. Oracle日志文件常用操作
  7. jquery中的on事件
  8. HihoCoder——Trie树
  9. 修改phpstorm的字体样式和大小
  10. mysql error 1130 hy000:Host 'localhost' is not allowed to connect to this mysql server 解决方案
  11. VS2013 工程属性配置
  12. iTOP-4418开发板Android 5.1/4.4丨Linux + Qt5.7丨Ubuntu12.04系统
  13. 【spring】从简单配置使用到深入
  14. 神经网络-SGD-2
  15. [NOIp2009] $Hankson$ 的趣味题
  16. windows环境下命令打到服务中
  17. spring梳理
  18. 真机提示Undefinedsymbolsforarchitecturearm64
  19. Object 类型
  20. Tensorflow学习笔记一

热门文章

  1. maven ClassNotFoundException: org.springframework.web.context.ContextLoader
  2. Android 打造自己的个性化应用(四):仿墨迹天气实现-->自定义扩展名的zip格式的皮肤
  3. Github错误:Failed to publish this branch
  4. MySQL主从同步、读写分离配置步骤
  5. iOS-设计模式之通知
  6. 【转载】"library not found for - "解决办法
  7. UIAlertController(警告栏) 自学之初体验
  8. setNeedsDisplay、layoutSubViews
  9. MVC再次学习1
  10. 安装好ubuntu之后要干的几件事