在子类中调用父类的方法super
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的更多相关文章
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
Python 在子类中调用父类方法详解(单继承.多层继承.多重继承) by:授客 QQ:1033553122 测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...
- python基础----继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,在pyth ...
- python基础之类的继承与派生、组合、接口与归一化设计、抽象类、子类中调用父类方法
一.什么是继承 继承是一种创建新的类的方式,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. 派生:子类继承了父类的属性,然后衍生出自己新的属性,如果子类衍生出的新 ...
- python学习-65 继承2-子类中调用父类的方法
子类中调用父类的方法 1.子类继承了父类的方法,然后想进行修改,那么就需要在子类中调用父类的方法. 2.方法一:父类名 class School: Country = 'china' def __in ...
- 子类中执行父类的方法(引出super()与mro列表)
1. 我们先想一下在python中如果子类方法中想执行父类的方法,有什么方式?大概有三种: Parent.__init__(self, name) # 通过父类的名字,指定调用父类的方法 super( ...
- c++与java中子类中调用父类成员的方法
java中: import java.util.Scanner; public class ClassTest{ public static void main(String args[]){ chi ...
- c++虚函数、子类中调用父类方法
全部 代码: 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include< ...
- python cookbook第三版学习笔记十一:类和对象(二)调用父类的方法
在子类中调用父类的方法,可以下面的A.spam(self)的方法. class A(object): def spam(self): print 'A.spam' class ...
- 【Python】Python中子类怎样调用父类方法
python中类的初始化方法是__init__(),因此父类子类的初始化方法都是这个,如果子类不实现这个函数,初始化时调用父类的初始化函数,如果子类实现这个函数,就覆盖了父类的这个函数,既然继承父类, ...
随机推荐
- 第三个Sprint冲刺第二天(燃尽图)
- Maven的课堂笔记2
5 maven的核心概念 5.1 项目对象模型 说明: maven根据pom.xml文件,把它转化成项目对象模型(POM),这个时候要解析依赖关系,然后去相对应的maven库中查找到依赖的jar包. ...
- maven上传本地jar包到私服
场景 1. 本地jar包上传到私服 思路: 1. maven的settting.xml配置私服的帐号密码 2. pom.xml配置上传的地址 3. 执行 mvn deploy 部署jar包到私服 步骤 ...
- Eclipse版本列表
https://wiki.eclipse.org/Older_Versions_Of_Eclipse http://blog.csdn.net/jaycee110905/article/details ...
- STL数据结构
priority_queue "C++ reference"上如此解释priority queue:"This context is similar to a heap, ...
- hive存储、数据模型、内部表
创建内部表 加一列元素 删除表
- SQL Server 常用函数使用方法(持续更新)
之前就想要把一些 SQL 的常用函数记录下来,不过一直没有实行...嘿嘿... 直到今天用到substring()这个函数,C# 里面这个方法起始值是 0,而 SQL 里面起始值是 1.傻傻分不清楚. ...
- jenkins--使用命令行自动启动Jenkins的job
Jenkins作为持续集成强大的开源工具,除了使用界面它还有强大的cli命令. 1 自动启动jenkins 的job: 启动不带参数的job: curl --user USER:PASSWORD JE ...
- 说说Java 位运算
前言 我们都知道,在计算机世界里,再复杂,再美的程序,到最后都会变成0与1.也就是我们常说的:二进制.二进制相信大家都很熟悉.与现实世界不同的是,在现实世界里,我们通常都是用十进制来表示的,也就是遇十 ...
- 【BZOJ2003】[HNOI2010]矩阵(搜索)
[BZOJ2003][HNOI2010]矩阵(搜索) 题面 懒得粘了,不难找吧. 题解 看的学长写的题解,也懒得写了 大概是这样的. 不难发现只需要确定第一行和第一列就能确定答案,而确定第一行之后每确 ...