一、    引言

凡是面向对象设计的语言,在类实例化时都有构造方法,很多语言的构造方法名与类名一致,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. 十个Pycharm快捷键——提升效率

    一些比较实用的Pycharm的快捷键,提升编写开发效率. 1.解除语法限制 默认情况下,Pycharm会对代码进行检查,包括但不仅限于代码是否有语法错误,是否符合PEP8规范. 如命名检查,如下图 变 ...

  2. 为什么大多数IOC容器使用ApplicationContext,而不用BeanFactory

    1. 引言 Spring框架附带了两个IOC容器– BeanFactory 和 ApplicationContext. BeanFactory是IOC容器的最基本版本,ApplicationConte ...

  3. 在java9+版本中,接口的内容和注意

    1.成员变量其实就是常量,格式: [public] [static] [final] 数据类型 常量名称 = 数据值: 注意: 常量必须进行赋值,而且一旦赋值不能改变. 常量名称完全大写,用下划线进行 ...

  4. [阿里DIN]从模型源码梳理TensorFlow的形状相关操作

    [阿里DIN]从模型源码梳理TensorFlow的形状相关操作 目录 [阿里DIN]从模型源码梳理TensorFlow的形状相关操作 0x00 摘要 0x01 reduce_sum 1.1 reduc ...

  5. makefile 函数

    1. findstring $(findstring <find>, <in>) 从 in 中查找 find ,如果找到则返回find,否则返回空 str1=1111 str2 ...

  6. 一文看懂Java序列化之serialVersionUID

    serialVersionUID适用于Java的序列化机制.简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的 ...

  7. API的使用(3)Arrays 类,Math类,三大特性--继承

    Arrays类 概述   java.util.Arrays此时主要是用来操作数组,里面提供了很多的操作API的方法.如[排序]和[搜索]功能.其所有的方法均为静态方法,调用起来非常简单. 操作数组的方 ...

  8. Apache Flink Dashboard未授权访问导致任意Jar包上传漏洞

    漏洞危害 攻击者无需Flink Dashboard认证,通过上传恶意jar包 csdn-[漏洞复现]Apache Flink任意Jar包上传导致远程代码执行 freebuf-Apache Flink ...

  9. MathType中余弦函数的输入

    余弦函数是三角函数中十分重要的一个知识点,余弦函数的俩种形式分别为a2=b2+c2-2bccosA和cosA=(b2+c2-a2)/2bc,接下来我们分别介绍一下这俩种形式的输入. 具体步骤如下: 步 ...

  10. 在Jenkins的帮助下让我们的应用CI与CD

    上图三位大家应该很熟悉吧,借助这三者可以让我们的服务在Linux环境下持续集成.容器中持续部署. 本篇博客的项目是core webapi, .NET 5.0 在11号已经正式发布了,你们的项目都升级了 ...