python3 class init_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:

classBar():def __init__(self):pass

mdl/foo.py

classFoo():def __init__(self):pass

test.py

from mdl.foo importFoofrom mdl.bar importBar

f=Foo()

b= Bar()

大家看到的贴的代码,可能就知道我所要说的是什么意思了吧……

对,没错。

之前在我们使用python2的时候(至少从python2.6之后是这样),我们通常将__init__.py置空(PS:置空的话,与python3也可以通用)或者直接(如下图所示)

from foo importFoofrom bar import Bar

然后可以正常地愉快地使用python test.py,没有任何报错信息。

但是在python3的时候(至少从python3.4之后是这样),我们这么来做

from foo importFoofrom bar import Bar

运行python test.py发现出错了,囧……

ImportError: No module named 'foo'

别的我也不多说了,我想大家也都看明白了

建议,大家之后都使用这种方式(通用用法)

from .foo importFoofrom .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

(看到了不同了吧……)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

simulink和psim仿真结果不同_在HFSS进行AC耦合电容仿真优化怎么做?

AC耦合电容,也叫DC blocking隔直电容,在几乎所有的高速串行链路中,都可以看到它的身影,它的主要作用是去掉信号中的直流偏置分量,同时让高频分量可以顺利通过,类似于一个高宽带的滤波器。由于电容的焊盘通常…

民生银行 一码付 php,PHP开心码支付免签约第四方支付平台源码修复版

源码说明后台号码admin后台密码123456声明:该源码仅供学习出现,修复者不承担任何责任,下载安装即代表使用者自行承担责任源码安装方法需要服务器开启g11插件PHP5.6,主机用户推荐95云主机,因为已经开启所有扩展插件必须…

oracle主从表分离怎么实时更新数据_高可用数据库UDB主从复制延时的解决

MySQL主从复制的延时一直是业界困扰已久的问题。延时的出现会降低主从读写分离的价值,不利于数据实时性较高的业务使用MySQL。UDB是UCloud推出的云数据库服务,上线已达六年,运营了数以万计的UDB MySQL实例。除了提供高可用、高性能、便捷易用…

vp翻N_VP刀叨叨:如何让G胖给你唱生日歌

VS看起来好凶喵▼ESL欧洲&独联体区VP发推庆祝击败OG昨晚第九个比赛日,OG与VP的比赛无疑是大家关注的焦点,一边是TI双冠王,一边是状态开始回升的俄罗斯毛熊,大家都很期待他们能给我们带来精彩的比赛。不过比赛结果却出乎了不少…

秒后面的单位是什么_为什么兰州马拉松很难跑出好成绩?

如果要评选中国最难PB的马拉松,西北第一马兰州马拉松当之无愧可以排名第一。为什么这么说呢?先来看下今年兰马的一组数据,不管是精英选手还是大众选手,成绩都要比个人PB慢。国内男子冠军是管油胜,成绩为2小时18分58秒&…

surface php老是用不了,surface pro7触摸屏没反应怎么办

发生该问题的原因可能是:有很多可能原因,从校准到硬件或者固件。故障排查可以找到根本原因。1. 清洁屏幕将柔软的无绒布蘸上水或眼镜清洗液来清洁屏幕,但不要直接在屏幕上喷洒液体。2. 重启 Surface注意:你将需要连接键盘或鼠标到…

小优优(u盘歌曲顺序调整)_电脑从U盘启动,这三种方式你知道吗?

Windows 可以运行在数千台不同配置的电脑上, 但安装 Windows 10又是另一回事, 具体取决于你的电脑是否安装了现有的 Windows 10,以及早期版本,像是 Windows7, Windows XP, 或完全不同的操作系统(如 macOS 或 Linux)。大多数情况, 安装系统都依赖于主硬盘HDD或SSD以外的设备启动…

unity vs没有智能提示_Unity博主营地你不可不知的Unity C#代码小技巧

「Unity博主营地第一期」于2019年11月开启,现已收到数百篇原创投稿。每周根据Unity Connect社区反馈,帮助大家发现最优质、最干货、最受欢迎的博文作品。开门见山的说,这篇文章干到挤不出一点水分。文章主要针对Unity初学者,相信读…

oracle insert忽略重复数据,Oracle’INSERT ALL’忽略重复项

我有一个具有唯一约束的数据库表(唯一的(DADSNBR, DAROLEID)对)。 我将同时向该表中插入多个值,因此我想使用一个查询来完成它-我假设这将是更快的方法。 因此,我的查询是:INSERT ALLINTO ACCESS (DADSNBR, DAROLEID) VALUES (68, 1)INTO ACC…

python炼丹师是什么_2021年编程语言趋势预测:Python和JavaScript仍火热,Go不可小觑...

编译 | 陈大鑫Tensorflow和Pytorch到底该用哪个呢?“import tensorflow as pytorch!”编程语言及框架似乎总是被人拿来比较,这里我们只谈语言。作为开发人员,在当今这个技术更迭飞快的时代要连年吃香并非易事,很多十年开发经验以上…

python123数值运算_python123中 Hello World的条件输出 和数值运算

描述 获得用户输入的一个整数,参考该整数值,打印输出"Hello World",要求:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪…

row number函数 oracle,oracle函数 ROW_NUMBER()

【语法】ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)【功能】表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)row_number() 返回的主要是“行”的信息,并没有排名【参数】【说…

perl python json_Perl解析JSON数据精解

简介:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C, C#, Java, JavaScript, Perl,…

python while true_Python天坑系列(一):while 1比while True更快?

更多 0. 前言 前些天被Python的多线程坑了一把,因此产生了写一个《Python天坑系列》博客的想法,说说我碰到的那些Python的坑。 而天坑这个词呢,一方面指Python的坑,另一方面也说明本系列文章也是个坑,对于会写什么内容…

下列不属于PHP开发优势的是,php开发的优势有哪些?

说到PHP,好多刚刚毕业的学生都不是非常了解。这里,达内PHP培训老师跟大家分析一下目前行业中对这个技术方向的需求及发展情况。由于大学学科设置的问题,更多的学生都对C,C,Java等计算机语言比较熟悉,同时也…

苹果sf字体_苹果UI设计的改变意味着什么?

WWDC虽然已经过去了一段时间,虽然没有什么硬件产品,但还是给我们带来了许多新的惊喜。但我们这篇文章不谈技术问题,只谈苹果的UI变化。因为这可能是近10年来苹果第二次颠覆性的升级,上次还是2013年的iOS7的全面扁平化。从设计的层…

python需要配置环境变量吗_python安装和配置环境变量

Python 安装和配置环境变量 一、 Python 的安装: 在网上找一个 python 的安装包,我找的 python3.3.5 。照着安装步骤一步一步进行安装,完 成后,运行 IDLE(Python GUI) ,打开的命令行框出现类似如下内容则说明安装成功&…

python的tkinter按钮大小_如何使用python更改tkinter中按钮和帧的字体和大小?

更新:新墨西哥州科技tkinter网站已在GitHub上存档。必须有Tkinter对象才能创建字体from Tkinter import *import tkFontroot Tk()创建一个类似新墨西哥科技网站示例的字体helv36 tkFont.Font(familyHelvetica, size36, weightbold)# you dont have to use Helveti…

linux命令 翻译,(翻译)Linux命令行(一)

这里的Linux命令行系列是翻译自http://www.linuxguide.it/的,如果你英语够好,推荐你去看原版的。这是第一篇,主要介绍关机重启等操作和查看系统信息等操作的命令。关机重启等操作shutdown -h now 关机init 0 …

cuda卸载_Ubuntu18.04英伟达显卡驱动、Cuda安装

一、显卡驱动安装1. 准备工作禁用BIOS中的secure boot,因为此方法使用第三方源安装显卡驱动,不禁止secure boot会导致安装的驱动不能使用,禁用也不会有多大安全隐患。2. 禁用nouveau禁用nouveau,这是ubuntu默认使用的开源显卡驱动…