python3 module中__init__.py的需要注意的地方
2024-08-24 07:51:12
网上关于__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
(看到了不同了吧……)
最新文章
- 4-Server安全配置
- C# Double保留小数点后面位数
- Netfilter&;iptables:如何理解连接跟踪机制?
- 曲面Shader
- 小波变换和motion信号处理(三)(转)
- Oracle日志文件常用操作
- jquery中的on事件
- HihoCoder——Trie树
- 修改phpstorm的字体样式和大小
- mysql error 1130 hy000:Host 'localhost' is not allowed to connect to this mysql server 解决方案
- VS2013 工程属性配置
- iTOP-4418开发板Android 5.1/4.4丨Linux + Qt5.7丨Ubuntu12.04系统
- 【spring】从简单配置使用到深入
- 神经网络-SGD-2
- [NOIp2009] $Hankson$ 的趣味题
- windows环境下命令打到服务中
- spring梳理
- 真机提示Undefinedsymbolsforarchitecturearm64
- Object 类型
- Tensorflow学习笔记一
热门文章
- maven ClassNotFoundException: org.springframework.web.context.ContextLoader
- Android 打造自己的个性化应用(四):仿墨迹天气实现-->;自定义扩展名的zip格式的皮肤
- Github错误:Failed to publish this branch
- MySQL主从同步、读写分离配置步骤
- iOS-设计模式之通知
- 【转载】"library not found for - "解决办法
- UIAlertController(警告栏) 自学之初体验
- setNeedsDisplay、layoutSubViews
- MVC再次学习1
- 安装好ubuntu之后要干的几件事