一直对__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) 则需要必须传值进来,不允许为空。对已有的数据导入很友好,在语句上减少了很多

最新文章

  1. Codeforces Round #377 (Div. 2)D(二分)
  2. 【stut 逆置正整数】
  3. Winform开发框架之简易工作流设计
  4. SSRS用自定义对象绑定报表
  5. loj 1251(2-sat + 输出一组可行解)
  6. PO3281 Dining(最大流)
  7. 分页sql
  8. SQL SERVER类型与C#类型对照
  9. Matlab与微积分计算
  10. FPGA串口波特率简析
  11. android webview无法加载网页
  12. Serv-U执行CMD命令
  13. 通过一篇YAML来学习YAML
  14. 斯坦福大学公开课机器学习: neural networks learning - autonomous driving example(通过神经网络实现自动驾驶实例)
  15. VC9、VC11、VC14、VC15库 32位 64位 免费下载
  16. zookeeper logs and snapshot
  17. 使用composer进行依赖管理:以guzzle为例
  18. css笔记 - animation学习笔记(二)
  19. Andrew Ng-ML-第十八章-大规模机器学习
  20. Android java 多线程(三)

热门文章

  1. Java - 谨慎覆盖equals
  2. Spring Cloud实战之初级入门(五)— 配置中心服务化与配置实时刷新
  3. 四层协议和Socket编程
  4. Tomcat服务器配置https认证(使用keytool生成证书)
  5. C++中 set(集合容器)的用法
  6. MySQL性能优化的20+条经验
  7. Android weex的集成和开发
  8. xlwings: Write Excel macro using python instead of VBA
  9. OutputStream-InputStream-FileOutputStream-FileInputStream-BufferedOutputStream-BufferedInputStream-四种复制方式-单层文件夹复制
  10. sql server——子查询