1、没有super之前,在子类里面需要父类里面的逻辑,但是我们是通过派生(自己定义了一个init,增加了一条line)

class vehichle:#定义一个交通工具的类
Country="China"
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power
def run(self):
print("开动啦")
class Subway(vehichle):#定义一个地铁,继承父类vehichle
# pass#如果自己没有init,Subway会继承父类的init方法
def __init__(self,name,speed,load,power,line):
self.name=name
self.speed=speed
self.load=load
self.power=power
self.line=line
def show_info(self):
print(self.name,self.line)
line13=Subway("北京地铁","10km/s","10000人","电",13)#实例化一个line13
line13.show_info()#用实例调用类的属性,会自动把实例本身穿进去 C:\python35\python3.exe D:/pyproject/day25/在子类中调用父类.py 北京地铁 13 

2、改进一下,在子类中调用父类的init方法

class vehichle:#定义一个交通工具的类
Country="China"
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power
def run(self):
print("开动啦")
class Subway(vehichle):#定义一个地铁,继承父类vehichle
# pass#如果自己没有init,Subway会继承父类的init方法
def __init__(self,name,speed,load,power,line):
vehichle.__init__(self,name,speed,load,power)#调用父类的init方法
self.line=line
def show_info(self):
print(self.name,self.speed,self.load,self.line)
line13=Subway("北京地铁","10km/s","10000人","电",13)#实例化一个line13
line13.show_info()#用实例调用类的属性,会自动把实例本身穿进去 C:\python35\python3.exe D:/pyproject/day25/在子类中调用父类.py 北京地铁 10km/s 10000人 13

3、在子类里面也调用一下父类的run方法

class vehichle:#定义一个交通工具的类
Country="China"
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power
def run(self):
print("开动啦")
print("父类的开动啦")
class Subway(vehichle):#定义一个地铁,继承父类vehichle
# pass#如果自己没有init,Subway会继承父类的init方法
def __init__(self,name,speed,load,power,line):
vehichle.__init__(self,name,speed,load,power)#调用父类的init方法
self.line=line
def show_info(self):
print(self.name,self.speed,self.load,self.line)
def run(self):
vehichle.run(self)
print("%s %s 开动啦" %(self.name,self.line))
line13=Subway("北京地铁","10km/s","10000人","电","13号线")#实例化一个line13
line13.show_info()#用实例调用类的属性,会自动把实例本身穿进去
line13.run() C:\python35\python3.exe D:/pyproject/day25/在子类中调用父类.py 北京地铁 10km/s 10000人 13号线 开动啦 父类的开动啦 北京地铁 13号线 开动啦

4、super方法   调用父类的方法

super的方法的好处是,当你的父类的名字改变之后,只需要在Subway那里继承的名字改一下,就行,不用动下面的逻辑

第一种写法:

class vehichle:#定义一个交通工具的类
Country="China"
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power
def run(self):
print("开动啦")
print("父类的开动啦")
class Subway(vehichle):#定义一个地铁,继承父类vehichle
# pass#如果自己没有init,Subway会继承父类的init方法
def __init__(self,name,speed,load,power,line):
# vehichle.__init__(self,name,speed,load,power)#调用父类的init方法
super().__init__(name,speed,load,power)#调用父类的init
self.line=line
def show_info(self):
print(self.name,self.speed,self.load,self.line)
def run(self):
# vehichle.run(self)
super().run()#调用父类的run
print("%s %s 开动啦" %(self.name,self.line))
line13=Subway("北京地铁","10km/s","10000人","电","13号线")#实例化一个line13
line13.show_info()#用实例调用类的属性,会自动把实例本身穿进去
line13.run() C:\python35\python3.exe D:/pyproject/day25/super方法的使用.py 北京地铁 10km/s 10000人 13号线 开动啦 父类的开动啦 北京地铁 13号线 开动啦 第二种写法: super().__init__(name,speed,load,power)等价于 super(Subway,self).__init__(name,speed,load,power) super().run()等价于 super(Subway,self).run()
 

我们记住上面的第一种就行了,有的人写第二种我们也要能看懂

class vehichle:#定义一个交通工具的类
Country="China"
def __init__(self,name,speed,load,power):
self.name=name
self.speed=speed
self.load=load
self.power=power
def run(self):
print("开动啦")
print("父类的开动啦")
class Subway(vehichle):#定义一个地铁,继承父类vehichle
# pass#如果自己没有init,Subway会继承父类的init方法
def __init__(self,name,speed,load,power,line):
# vehichle.__init__(self,name,speed,load,power)#调用父类的init方法
# super().__init__(name,speed,load,power)#调用父类的init
super(Subway,self).__init__(name,speed,load,power)#调用父类的init
self.line=line
def show_info(self):
print(self.name,self.speed,self.load,self.line)
def run(self):
# vehichle.run(self)
# super().run()#调用父类的run
super(Subway,self).run() # 调用父类的run
print("%s %s 开动啦" %(self.name,self.line))
line13=Subway("北京地铁","10km/s","10000人","电","13号线")#实例化一个line13
line13.show_info()#用实例调用类的属性,会自动把实例本身穿进去
line13.run() C:\python35\python3.exe D:/pyproject/day25/super方法的使用.py 北京地铁 10km/s 10000人 13号线 开动啦 父类的开动啦 北京地铁 13号线 开动啦

在子类中调用父类的方法super的更多相关文章

  1. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  2. python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法

    一.什么是继承                                                                          继承是一种创建新的类的方式,在pyth ...

  3. python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法

    一.什么是继承 继承是一种创建新的类的方式,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. 派生:子类继承了父类的属性,然后衍生出自己新的属性,如果子类衍生出的新 ...

  4. python学习-65 继承2-子类中调用父类的方法

    子类中调用父类的方法 1.子类继承了父类的方法,然后想进行修改,那么就需要在子类中调用父类的方法. 2.方法一:父类名 class School: Country = 'china' def __in ...

  5. 子类中执行父类的方法(引出super()与mro列表)

    1. 我们先想一下在python中如果子类方法中想执行父类的方法,有什么方式?大概有三种: Parent.__init__(self, name) # 通过父类的名字,指定调用父类的方法 super( ...

  6. c++与java中子类中调用父类成员的方法

    java中: import java.util.Scanner; public class ClassTest{ public static void main(String args[]){ chi ...

  7. c++虚函数、子类中调用父类方法

    全部 代码: 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include< ...

  8. python cookbook第三版学习笔记十一:类和对象(二)调用父类的方法

    在子类中调用父类的方法,可以下面的A.spam(self)的方法. class A(object):     def spam(self):         print 'A.spam' class ...

  9. 【Python】Python中子类怎样调用父类方法

    python中类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用父类的初始化函数,如果子类实现这个函数,就覆盖了父类的这个函数,既然继承父类, ...

随机推荐

  1. ajax多级菜单栏

    1.jsp 首先ajax查询数据 <script type="text/javascript"> function targetlist() { $.ajax({ ur ...

  2. 基于UML的需求分析和系统设计

    小序: 从学生时代就接触到UML,几年的工作中也没少使用,各种图形的概念.图形的元素和属性,以及图形的画法都不能说不熟悉.但是怎样在实际中有效地使用UML使之发挥应有的作用,怎样捕捉用户心中的需求并转 ...

  3. 个人项目junit4测试

    一.题目简介 用java编写一个程序,模拟ATM柜员机. 二.源码的github链接 www.github.com/liuxianchen/test 三.所设计的模块测试用例.测试结果截图 四  心得 ...

  4. 爬虫时http错误提示

    在爬虫,请求网站的时候,有时候出现域名报错,所出现的代码所对应的意思:

  5. vue路由异步组件案例

    最近研究了vue性能优化,涉及到vue异步组件.一番研究得出如下的解决方案. 原理:利用webpack对代码进行分割是异步调用组件前提.异步组件在优先级上让位同步组件.下面介绍的是怎么实现异步组件. ...

  6. MySQL分区和分表

    一.概念 1.为什么要分表和分区?日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询 ...

  7. 买了本Delphi面向对象编程思想,正在看,产生些问题。

    1:第33页说,Delphi通过调用类的一个构造函数来建立一个对象的实例,对象至少有一个create()的构造函数,使用时候写MyObject:=TmyObject.create即可.   但是第37 ...

  8. Delphi+DBGrid导出Excel

    uses ComObj; //DBGrid:指定的DBGrid;SaveFileName:要保存的文件名 function ExportDBGrid(DBGrid: TDBGrid; SaveFile ...

  9. 一对一 只需将另一个表的id设置为主键和外键即可

    一对一 只需将另一个表的id设置为主键和外键即可 

  10. Docker容器从一知半解到入门

    Docker是一个开源的.跨平台的应用容器引擎,可以让技术开发认用打包他们的应用以及一些依赖包到一个可移植的容器平台中,发布到任何流行的Linux操作系统上面,也可以在Windows和mac操作系统上 ...