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

一、    案例说明

本节定义一个汽车类,它有四个实例变量: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. 【Kata Daily 190927】Counting sheep...(数绵羊)

    题目: Consider an array of sheep where some sheep may be missing from their place. We need a function ...

  2. 【Kata Daily 190919】Sort Out The Men From Boys(排序)

    题目: Scenario Now that the competition gets tough it will Sort out the men from the boys . Men are th ...

  3. 【SpringBoot】13. logback日志记录

    logback日志记录 Spring Boot 1.5.19.RELEASE 1.导入相关jar包 在spring-boot-starter-web 中已经包含 2.添加logback.xml配置文件 ...

  4. 【QT】QtConcurrent::run()+QThreadPool实现多线程

    往期链接: <QThread源码浅析> <子类化QThread实现多线程> <子类化QObject+moveToThread实现多线程> <继承QRunnab ...

  5. 利用MultipartFile来进行文件上传

    这个例子实在SpringMVC的基础上完成的,因此在web.xml中需要配置 web.xml <!-- 配置Spring MVC的入口 DispatcherServlet,把所有的请求都提交到该 ...

  6. Python之Matplot——01.堆叠柱状图的绘制

    1.Matplotlib是python的一个绘图库,可以方便的绘制各种图标,是数据可视化的利器. 2.本文我就给大家介绍一下条形图或者说柱状图的绘制 3.代码如下: <1>首先导入模块 1 ...

  7. JS多物体宽度运动案例

    任务 对于每一个Div区块,鼠标移入,宽度逐渐变宽,最宽值为400px,当鼠标移除时,宽度逐渐减小,最小值为100px. 任务提示: (1)多物体运动的定时器需要需要每个物体上同时最多只能开一个定时器 ...

  8. 【django】长轮询

    API.PY import queue from django.contrib.auth.hashers import check_password from rest_framework.views ...

  9. 使用GitHub API上传文件及GitHub做图床

    本文介绍GitHub API基础及上传文件到仓库API,并应用API将GitHub作为图床 GitHub API官方页面 GitHub API版本 当前版本为v3,官方推荐在请求头中显示添加版本标识. ...

  10. t分布与t检验的一点理解

    最近又遇到了t分布及t检验方面的内容,发现有些地方自己当初没有很明白,就又查了些资料,加深了一下自己的理解,这里也将自己的一些理解记录下来. 1. 理论基础--大数定理与中心极限定理        在 ...