• 在子类中调用父类的方法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号线 开动啦
  • 相关阅读:
    敏捷个人2011.7月份第一次线下活动报道:迷茫、游戏和故事中的敏捷个人.
    敏捷开发:60分钟掌握敏捷估计和规划
    敏捷之旅北京2011.11月份活动报道:让敏捷落地
    敏捷个人2011.6月份线下活动:拖延、知道力分享
    答TOGAF企业架构的一些问题
    活动推荐:Agile Tour 2011北京站“让敏捷落地”
    敏捷个人2011.5月份线下活动主题一:培养好习惯
    第二届清华大学项目管理精英训练营【敏捷个人】分享
    产品管理:产品的三种驱动类型技术、销售和市场驱动
    敏捷个人线上线下活动PPT及照片做成的视频共享
  • 原文地址:https://www.cnblogs.com/gouguoqilinux/p/9197239.html
Copyright © 2020-2023  润新知