zoukankan      html  css  js  c++  java
  • 在子类中调用父类的方法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:python35python3.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:python35python3.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:python35python3.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:python35python3.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:python35python3.exe D:/pyproject/day25/super方法的使用.py
    
    北京地铁 10km/s 10000人 13号线
    
    开动啦
    
    父类的开动啦
    
    北京地铁 13号线 开动啦
  • 相关阅读:
    命令用法示例
    Elastic:用Docker部署Elastic栈
    Elastic:使用Heartbeat进行Uptime监控
    Elastic:如何在一个机器上同时模拟多个node
    Elastic 使用索引生命周期管理实现热温冷架构
    Logstash:运用jdbc_streaming来丰富我们的数据
    Logstash:多个配置文件(conf)
    Logstash:处理多个input
    使用 Logstash 和 JDBC 确保 Elasticsearch 与关系型数据库保持同步
    Logstash:把MySQL数据导入到Elasticsearch中
  • 原文地址:https://www.cnblogs.com/gouguoqilinux/p/9197239.html
Copyright © 2011-2022 走看看