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) 则需要必须传值进来,不允许为空。对已有的数据导入很友好,在语句上减少了很多
最新文章
- Codeforces Round #377 (Div. 2)D(二分)
- 【stut 逆置正整数】
- Winform开发框架之简易工作流设计
- SSRS用自定义对象绑定报表
- loj 1251(2-sat + 输出一组可行解)
- PO3281 Dining(最大流)
- 分页sql
- SQL SERVER类型与C#类型对照
- Matlab与微积分计算
- FPGA串口波特率简析
- android webview无法加载网页
- Serv-U执行CMD命令
- 通过一篇YAML来学习YAML
- 斯坦福大学公开课机器学习: neural networks learning - autonomous driving example(通过神经网络实现自动驾驶实例)
- VC9、VC11、VC14、VC15库 32位 64位 免费下载
- zookeeper logs and snapshot
- 使用composer进行依赖管理:以guzzle为例
- css笔记 - animation学习笔记(二)
- Andrew Ng-ML-第十八章-大规模机器学习
- Android java 多线程(三)
热门文章
- Java - 谨慎覆盖equals
- Spring Cloud实战之初级入门(五)— 配置中心服务化与配置实时刷新
- 四层协议和Socket编程
- Tomcat服务器配置https认证(使用keytool生成证书)
- C++中 set(集合容器)的用法
- MySQL性能优化的20+条经验
- Android weex的集成和开发
- xlwings: Write Excel macro using python instead of VBA
- OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream-四种复制方式-单层文件夹复制
- sql server——子查询