python中__init__.py与def __init__(self)的使用
一直对__init__的使用很迷茫,这里系统的学习了解下

1.__init__.py文件-package的标识
python中每个package实际上是一个目录(Directory),程序运行时如何识别它为package呢?
是的,__init__.py第一个作用就是package的标识,倘若没有该文件,则证明该目录不是一个package
python中包和模块的两种导入方式:精确导入和模糊导入
精确导入:
from Pack.pack1 import Pack1Class import Pack.pack1.Pack1Class
模糊导入:
from Pack.pack1 import *
2.定义package中的__all__,控制包的导入行为
而模糊导入中的*中的模块是由__all__来定义的,__init__.py的第二个作用就是定义package中的__all__模块,用于模糊导入
如:
__init__.py 文件
__all__ = ['os', 'sys', 're', 'urllib']
pack1.py文件:
from package1 import *
把注册在__init__.py文件中__all__列表中的模块和包导入到当前文件中来。
可以看到__init__.py可以控制包的导入行为,补充一下:想清楚的理解__init__.py的作用,还需了解import的引用机制:
可以被import语句导入的对象是:
- 模块文件(.py文件)
- 共享库或DLL文件
- 包(包含多个模块)
- 内置模块(使用C编写并已链接到python解释器中)
当导入模块时,解释器按照sys.path列表中的目录顺序来查找导入文件。
3.而def __init__(self) ,def __init__(self,param多参数):
常见的两种类的定义方式:
class Example:
def __init__(self):#两者之间的区别
self.username= None
self.password= None def __init__(self, username, pwd):
self.username= name
self.pwd= pwd
区别很明显,前者在__init__方法中,只有一个self,指的是实例本身;但是后者在方法中,包含username,pwd属性,在定义方法是,就直接给定两个参数
那么他们是如何实例化的呢?
第二种带参数的很明显直接实例化,传入相应参数;
example=Example("haha","")
第一种则需要先实例化,然后针对属性进行赋值
example=Example()
example.username="haha"
example.password=""
思考下:__init__(self)与__init__(self,param多个参数)的区别在哪里呢??
1.__init__(self,param所参数) 定义了这样一种类,他可以是一个空的结构,比如学生的表,当学生还没有进行考试时,他已经有了学生的姓名和成绩,当新的数据来的时候,可以直接添加进来。这个可以很方便的进行
2.__init__(self) 则需要必须传值进来,不允许为空。对已有的数据导入很友好,在语句上减少了很多
python中__init__.py与def __init__(self)的使用的更多相关文章
- python中的super( test, self).__init__()
python中的super( test, self).__init__() 对继承自父类的属性进行初始化 首先找到test的父类(比如是类A),然后把类test的对象self转换为类A的对象,然后“被 ...
- python中 除了if else def class 有作用域 其余没有作用域
python中 除了if else def class 有作用域 其余没有作用域
- Python中module文件夹里__init__.py的功能
怎么引用模块 环境:win7 + python3.5.2文档结构: -project -data -src -filterCorpus.py -translateMonolingual.py 问题 ...
- Python中if __name__ == '__main__',__init__和self 的解析
1.2.1 一个.py文件被其他.py文件引用 假设我们有一个const.py文件,内容如下: 现在,我们写一个用于计算圆面积的area.py文件,area.py文件需要用到const.py文件中的P ...
- Python中的内置函数__init__()的理解
有点意思,本来我是学习java的.总所周知,java也有构造函数,而python在面向对象的概念中,也有构造函数.它就是 __init__(self) 方法. 其实类似于__init__()这种方法, ...
- Python中class内置方法__init__与__new__作用与区别探究
背景 最近尝试了解Django中ORM实现的原理,发现其用到了metaclass(元类)这一技术,进一步又涉及到Python class中有两个特殊内置方法__init__与__new__,决定先尝试 ...
- python中一个py文件如何调用其他py文件中的类和函数
HelloWorld 文件名称 Hello是类 from HelloWorld import Hello >>> h = Hello() >>> h.hello ...
- python中为什么 if/while/def/class语句需要冒号?
python中冒号主要用于增强可读性(ABC语言实验的结果之一).考虑一下这个: if a == b print(a) 与 if a == b: print(a) 注意第二种方法稍微容易一些.请进一步 ...
- python中执行py文件出错(提示File “<stdin>”,line 1,SyntaxError:invalid syntax)
解决办法: 上图中已通过输入python进入了python运行环境,出现>>>时候的不能再用python z.py 来运行hello.py文件: 应该通过exit()退出当前pyth ...
随机推荐
- Java基础(十三)反射
一.反射 1.反射概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的 ...
- 在JSP中将EXEL文件的数据传入到数据库中
在jsp中: 在script中使用函数: $(function(){ //var lpyear = document.getElementById("lpyear").value; ...
- git新建分支没有master分支,其他分支也看不到
git checkout -b dev git新建dev分支,发现切换到了dev分支,但是master分支没有了 git branch和git branch -a 都没有任何反应,看不到其他分支, g ...
- java TreeSet 实现存自定义不可重复数据
本文主要是介绍一下java集合中的比较重要的Set接口下的可实现类TreeSet TreeSet类,底层用二叉树的数据结构 * 集合中以有序的方式插入和抽取元素. * 添加到TreeSet中的元素必须 ...
- “没有用var声明的为全局变量”这种说法不准确
结论: “没有用var声明的变量为全局变量”这样的说法不太正确,需要在这句话前面加一个前提,如果①变量前面没有用var声明,②在变量所在在的作用域链中没有这个变量名称,则设置该变量为全局变量. 代码 ...
- siriWave.js的demo
demo.html <style>body { background: #000; }</style> <script src="../siriwave.js& ...
- 移动端开发:iOS与Android平台上问题列表
要CSS伪类 :active 生效,只需要给 document 绑定 touchstart 或 touchend 事件 <style> a { color: #000; } a:activ ...
- Java中的深拷贝和浅拷贝(转载)
深拷贝(深复制)和浅拷贝(浅复制)是两个比较通用的概念,尤其在C++语言中,若不弄懂,则会在delete的时候出问题,但是我们在这幸好用的是Java.虽然java自动管理对象的回收,但对于深拷贝(深复 ...
- Php 性能参数优化 及 Iptables 防火墙限制用户访问平率
Php-Fpm.Conf 文件配置优化 [global] pid = run/php-fpm.pid process_control_timeout=5 [www] listen.allowed_cl ...
- 落地生根两周年,微软Azure进入2.0时代
By: 申元庆 微软亚太科技有限公司董事长 微软亚太研发集团首席运营官 微软中国云计算与企业总经理 仿佛就在转眼间,微软Azure已经在中国落地生根两年了. 长风破浪会有时,直挂云帆济沧海.微软云技术 ...