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. Practice4 阅读《构建之法》6-7章

    关于第五章后面的阅读已经在Practice3中有所感悟,下面是6-7章的读书笔记. 第6章 敏捷流程这一章讲了“敏捷流程”这一概念,关于这一名词我是很陌生的,在阅读之后有了一定的理解.敏捷流程是提供了 ...

  2. Practice2 结对子之“小学四则运算”

    开发环境:Eclipse,js,css,html 程序完成的方向: 1.可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号.如: 2*(-4) = ...

  3. 广商博客冲刺第二天new

    队名:雷锋队 队员:叶子鹏 王佳宁 张奇聪 张振演 曾柏树 项目:广商博客(嵌入APP) 执笔人:王佳宁 第一天沖刺傳送門 第三天沖刺傳送門 今天主要是写需求分析,在经过组员的热烈地讨论,需求分析如下 ...

  4. 07-java学习-方法重载-idea集成开发工具学习-项目-模块-包

    方法重载的概念? 方法重载的好处? 集成开发工具idea的学习 下载 安装 设置 建项目 导入项目 建模块 导入模块 建包 复制粘贴包 建类 复制粘贴类 运行 调试

  5. Redis交互编程语言及客户端

    Redis Desktop Manager https://redisdesktop.com/download Redis Clients https://redis.io/clients/     ...

  6. Nginx rewrite模块深入浅出详解

    rewrite模块(ngx_http_rewrite_module) nginx通过ngx_http_rewrite_module模块支持url重写.支持if条件判断,但不支持else.另外该模块需要 ...

  7. Docker(十四)-Docker四种网络模式

    Docker 安装时会自动在 host 上创建三个网络,我们可用 docker network ls 命令查看: none模式,使用--net=none指定,该模式关闭了容器的网络功能. host模式 ...

  8. SQLPLUS SQLCMD连接管理oracle sqlserver的简单用法

    1. SQLPLUS 与plsql一样,其实不需要安装oracle客户端,只要是有sqlplus的即时客户端 以及将目录放置到path或者是相应的oralce_home变量中即可. 打开运行cmd s ...

  9. Qt__CMakeLists.txt

    cmake_minimum_required(VERSION 3.1.0) project (Project) if(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_CXX_FL ...

  10. CSS全屏布局的6种方式

    前面的话 全屏布局在实际工作中是很常用的,比如管理系统.监控平台等.本文将介绍关于全屏布局的6种思路 float [1]float + calc 通过calc()函数计算出.middle元素的高度,并 ...