一、    引言

凡是面向对象设计的语言,在类实例化时都有构造方法,很多语言的构造方法名与类名一致,Python中类的构造方法比较特殊,必须是__init__特殊方法。

二、    语法释义

1.    语法:__init__(self,*args,**kwargs)

其中:

1)    self为创建的实例,由Python自动传入。

各位看官注意:

1>关于self在此不进行详细介绍,如果需要了解请参考本博《第7.5节 揭开Python类中self的面纱》。这里self表示实例自身,从这里可以看出,调用构造方法时,实例已经存在了;

2)    args为实例创建时传入的非关键字参数,打包成元组tuple给函数体调用;

3)    kwargs为实例创建时传入的关键字参数,形式为字典,键值为关键字参数的关键字,字典元素值为对应关键字参数的实参值。

2.    语法释义:

1)    __init__ (self,*args,**kwargs)的参数是与实例定义的参数相对应的,实例定义的语法如下:

实例=类名(*args,**kwargs)

则:

a)    self参数表示实例自身,也就是等号左边的“实例”,按理说在调用构造方法前实例不存在,self也不存在,为什么参数中又可以用self呢?这是由Python自动处理的,在调用构造方法前,Python会调用__new__方法创建实例,因此调用构造方法时Python已经创建了实例,具体请参见本章后面章节关于__new__方法的介绍。从这个意义上说,__new__方法才是真正的构造方法,__init__方法是在此基础上对实例进行特定的处理;

b)    后面两个参数args、kwargs是完全复制实例定义中的两种参数,表示实例定义传入什么参数,则__init__方法是在实例定义参数的基础上增加一个“self”的参数,并将self作为第一个参数。

c)    args、kwargs不是两个参数,是两种参数,其中kwargs是关键字参数,args是非关键字参数,用args、kwargs分别传递创建实例时传递的所有常规实参和关键字参数实参,因此可能是0个或多个真正的参数。*args、**kwargs这种形式的参数传递模式称为“参数收集”,具体内容请参见本博客的《第5.2节 Python的函数参数收集》内容;

2)    构造方法不能有任何返回值,否则会报错;

3)    以上语法是自定义类重写__init__方法时必须遵守的语法,当Python创建实例后自动调用该方法,__init__()方法是可选的,如果自定义类没有重写该方法,则Python 会给出默认的__init__方法。由于构造方法在实例创建后即执行,因此在实例定义时就需要初始化的实例变量可以通过构造方法赋值来定义。

本节介绍了Python中的构造方法__init__的语法及参数说明,请大家好好理解,鉴于该方法比较重要,后面两节将进一步深入介绍。

老猿Python(https://blog.csdn.net/LaoYuanPython)系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。

欢迎大家批评指正,谢谢大家关注!

最新文章

  1. ubuntu安装虚拟磁带库mhvtl
  2. sizeof 跟 strlen 的区别
  3. js 漩涡
  4. (转)CSS的Sprites技术
  5. .NET NLog 详解(五) - Condition Expression
  6. 怎么修改tabbar的默认选中界面
  7. hdu 4828 Grids 卡特兰数+逆元
  8. mysql数据恢复
  9. jquerymobile局部渲染的各种刷新
  10. FastDFS设备、构造、配置()一-安装和部署
  11. Java 零散笔记
  12. 基于 Docker 的微服务架构实践
  13. idea整合SVN以及SVN的使用
  14. 复选框批量删除操作-jquery方式
  15. 算法:整数与ip地址转换
  16. Spring Boot学习笔记:ApplicationEvent和ApplicationEventListener事件监听
  17. 如何上传Packages到PyPI并批量抓取
  18. lua:值得看的博客资源 ...
  19. Spark2 Dataset之视图与SQL
  20. 洛谷.4525.[模板]自适应辛普森法1(Simpson积分)

热门文章

  1. solr 文档二
  2. python爬虫09selenium
  3. 解Bug之路-NAT引发的性能瓶颈
  4. 新疆地形数据下载:30米、12.5米、5米DEM地形数据
  5. Socket connect 等简要分析
  6. 自定义圆角背景的textview,抛弃shape
  7. 加速OSD的启动
  8. arm-linux openssl移植
  9. Distributing Custom Apps
  10. 三叶草极客大挑战2020 部分题目Writeup