一、    引言

凡是面向对象设计的语言,在类实例化时都有构造方法,很多语言的构造方法名与类名一致,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的世界。

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

第8.1节 Python类的构造方法__init__深入剖析:语法释义的更多相关文章

  1. 第8.25节 Python风格的__getattribute__属性访问方法语法释义及使用

    一. 引言 在<第8.13节 Python类中内置方法__repr__详解>老猿介绍了在命令行方式直接输入"对象"就可以调用repr内置函数或__repr__方法查看对 ...

  2. 第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解

    第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解 一.    引言 上两节介绍了构造方法的语法及参数,说明了构造方法是Python的类创建实例后首先执行的方法,并说明如果类 ...

  3. 第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析

    第7.17节  Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一 ...

  4. 第7.14节 Python类中的实例方法详析

    第7.14节 Python类中的实例方法详析 一.    实例方法的定义 在本章前面章节已经介绍了类的实例方法,实例方法的定义有三种方式: 1.    类体中定义实例方法 第一种方式很简单,就是在类体 ...

  5. 第8.6节 Python类中的__new__方法深入剖析:调用父类__new__方法参数的困惑

    上节<第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执行顺序及参数关系案例详解>通过案例详细分析了两个方法的执行顺序,不知大家是否注意到了,在上述 ...

  6. 第8.12节 Python类中使用__dict__定义实例变量和方法

    上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法. 一. 使用__dict__定义实例变量 语法: 对象名. dict[属性名] = ...

  7. 第8.7节 Python类__new__方法和构造方法关系深入剖析:__new__方法执行结果对__init__的影响案例详解

    一. 引言 前面章节介绍了类中的构造方法和__new__方法,并分析了二者执行的先后顺序关系.__new__方法在__init__方法前执行,__new__方法执行后才返回实例对象,也就是说__new ...

  8. 第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执行顺序及参数关系案例详解

    上节介绍了__new__()方法这个比构造方法还重要的方法的语法,本节通过案例来详细剖析__new__()方法的细节以及它与构造方法之间的关系. 一.    案例说明 本节以圆Cir类为例来说明,为了 ...

  9. 第8.4节 Python类中不是构造方法却胜似构造方法的__new方法__深入剖析:语法释义

    一.    引言 在本博前面的内容都对构造方法__init__进行了介绍,也在前面章节引入了__new__方法,但老猿认为__new__方法比构造方法__init__更应该属于构造方法.这是因为在Py ...

随机推荐

  1. 云计算之路-出海记-小目标:Hello World from .NET 5.0 on AWS

    品尝过船上的免费晚餐,眺望着 aws 上搭建博客园海外站的宏伟目标,琢磨着眼前可以实现的小目标,不由自主地在屏幕上敲出了 -- "Hello World!",就从这个最简单朴实的小 ...

  2. 美团笔试题_ACM最多队伍

    题目: 选择队伍参加ACM比赛,可以选择的人由N+M组成,N代表N个擅长算法的人,M代表M个擅长编程的人,选择要求:每个队伍三个人,每个队伍中至少有一个擅长算法的人,至少有一个擅长编程的人.求可以组成 ...

  3. Python练手项目实例汇总(附源码下载)

    今天给大家分享几个有趣的Python练手项目实例,希望对Python初学者有帮助哈~ 一.经典的俄罗斯方块   1. 绑定功能 1 # 绑定功能 2 class App(Frame): 3 def _ ...

  4. 企业中真实需要的集中管理软件SVN即Subversion版本控制

    一.SVN基本概念 SVN是Subversion的简称,是一个自由开源的版本控制系统. checkout: 把整个项目源码下载到本地 update: 从服务器上更新代码,使本地达到最新版本 commi ...

  5. Dem地形数据转换为cass支持的dat格式教程

    一.获取dem数据各类精度的dem高程数据下载这里不赘述,可以查阅这篇文章:高程数据下载 这里我们以12.5m精度的dem为例进行转换: 二.将dem数据转换为文本我们这里先将地形数据加载入globa ...

  6. powershell渗透-信息收集命令

    powershell渗透-信息收集命令 本文包含从 Internet 的各个角落收集的 PowerShell 命令列表,这些命令在渗透测试或红色团队练习期间可能会有所帮助. 该列表包括各种开发后的单行 ...

  7. python3:文件读写+with open as语句(转)

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  8. mysql参数总结

    1.innodb_old_blocks_pct 确定modpoint位置,默认37,(3/8=37%)可以通过这个调整young与old比. innodb_old_blocks_time:当有大的查询 ...

  9. Linux权限位(含特殊权限位s s t) 及chown\chmod命令使用

    1.普通权限位 ls –l查看文件的属性 [root@oldboy ~]# ls -l -rw-------. 1 root root 1073 Mar 4 22:08 anaconda-ks.cfg ...

  10. webug第十二关:我系统密码忘记了!

    第十二关:我系统密码忘记了! 文件上传 直接上传php一句话, 菜刀链接