前面一节介绍了构造方法定义的语法,并进行了语法解释说明,本节将通过案例来说明构造方法参数传递及返回值的情况。

一、    案例说明

本节定义一个汽车类,它有四个实例变量:wheelcount, power,oilcostperkm,totaldistance,分别对应轮子数、动力、每公里油耗、行驶总里程。为了聚焦内容,我们只在构造方法中显示参数传入值,不做任何处理。类定义如下:

class Car():
   def __init__(self,*args,**kwargs):       
print("In  __init__:args=",args,",kwargs=",kwargs)

二、    案例1:使用常规传递实参模式定义实例

car=Car(4,'汽油发动机',0.1,0)#参数分别是wheelcount, power,oilcostperkm,totaldistance

执行截图:



 

三、    案例2:使用关键字参数传递实参模式定义实例

使用关键字参数方式传递实参,关键字的名字和类实例变量不一定要对应,只要系统知道谁对谁就可以。

car=Car(wheel_count=4,power='汽油发动机',oilcost_perkm=0.1,total_distance=0)

执行截图:



 

四、    案例3:使用关键字参数和非关键字参数混合传值的模式

car=Car(4,'汽油发动机',oilcost_perkm=0.1,total_distance=0)



 

五、    案例4:不按约定填写任意个参数

car=Car('汽车','测试','随便填',wheel_count=4,power='汽油发动机',oilcost_perkm=0.1,total_distance=0)



 

六、    案例5:在构造函数中返回值

1.    类定义:

class Car(Vehicle):
    def __init__(self,wheelcount, power,oilcostperkm):
        self.oilcostperkm = oilcostperkm
        print("In Car __init__:oilcostperkm=",self.oilcostperkm)
        super().__init__(wheelcount, power)
        return 1

2.    执行实例定义:car=Car(4,'汽油发动机',0.1)

由于构造方法有返回值,应该报错。

3.    截图:

4.    案例说明:不应该在构造方法中返回值,如果一定要有返回语句,应该返回None。

本节结合案例详细介绍了构造方法参数的传递过程,每个案例都很简单,但说明:

1、    构造方法中的参数除了多了一个self参数外,与实例定义时传递的参数是一致的;

2、    通过收集参数模式(收集参数的概念请见上一节或《第5.2节 Python的函数参数收集》内容)可以支持可变个数的参数,但实际上增加了编码的代价,需要代码支持参数的解码,一般的构造方法中不建议使用,只有在需要实现特定接口但外围接口支持可变格式调用时才使用,这时也应该优先在构造方法中明确已经确定参数的参数名,只有可变部分用收集参数模式;

3、    构造方法不能返回值,如果一定要有返回语句,请返回None。

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

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

第8.2节 Python类的__init__方法深入剖析:构造方法案例详解的更多相关文章

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

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

  2. Python 类中__init__()方法中的形参与如何修改类中属性的值

    一.__init__()方法 如果__init__()方法为 class Cat(): def __init__(self,num) : self.num=num Python中类的__init__( ...

  3. 第8.1节 Python类的构造方法__init__深入剖析:语法释义

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

  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. 第7.18节 案例详解:Python类中装饰器@staticmethod定义的静态方法

    第7.18节 案例详解:Python类中装饰器@staticmethod定义的静态方法 上节介绍了Python中类的静态方法,本节将结合案例详细说明相关内容. 一.    案例说明 本节定义了类Sta ...

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

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

  9. 第7.20节 案例详解:Python抽象类之真实子类

    第7.20节 案例详解:Python抽象类之真实子类 上节介绍了Python抽象基类相关概念,并介绍了抽象基类实现真实子类的步骤和语法,本节结合一个案例进一步详细介绍. 一.    案例说明 本节定义 ...

随机推荐

  1. Cuda常用概念及注意点

    线程的索引计算 只需要知并行线程的初始索引,以及如何确定递增的量值,我们希望每个并行线程从不同的索引开始,因此就需要对线程索引和线程块索引进行线性化,每个线程的其实索引按照以下公式来计算: int t ...

  2. sdasd

    create PROCEDURE v4(in c_year int) BEGIN declare num int(10) default 0; declare num1 int(10); select ...

  3. Ubuntu 16.04升级18.04

    原文:https://blog.csdn.net/sean_8180/article/details/81075659 1.更新资源$ sudo apt-get update$ sudo apt-ge ...

  4. Docker 实战(2)- 配置 Jenkins 容器上的持续集成环境

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 搭建 Jenkins 容器 就是 ...

  5. 八位“Booth二位乘算法”乘法器

    目录 八位"Booth二位乘算法"乘法器 原理 补码乘法器 Booth一位乘 Booth二位乘 设计思路 减法变加法 vivado特性 设计文件 综合电路 测试文件 仿真波形 八位 ...

  6. 谈谈synchronized

    为什么要用synchronized关键字: synchronized是java的一种内部锁,是一种排他锁,通常也被称为悲观锁,它能够保障原子性,可见性,有序性. 当多个线程去调用同一个方法的时候,如果 ...

  7. centos6 virbox安装

    yum install kernel-devel yum update kernel* wget http://download.virtualbox.org/virtualbox/debian/or ...

  8. Go原生和GoFrame的Cookie关于MaxAge区别

    Go原生和GoFrame的Cookie关于MaxAge区别 环境: gf v1.14.4 go 1.11 Go原生 type Cookie struct { Name string Value str ...

  9. 搭建zookeeper集群(伪集群)

    jdk环境 上传zk压缩包 解压缩 复制三份 mkdir /usr/local/zk_cluster cp -r zookeeper-3.4.6 /usr/local/zk_cluster/zooke ...

  10. 【硬件】HDMI接口HPD原理

    目录 一.什么是HPD? 二.HDMI的HPD(热插拔)原理 三.HDMI源端对HPD信号有什么要求? 由于项目需要通过HDMI获取EDID的数据,需要学习一下其获取的工作原理,所以在这里记录下. 一 ...