zoukankan      html  css  js  c++  java
  • 在子类中重用父类的方法

    #在子类派生出新的方法中,重用父类的方法,有两种 :

     #1。指名道姓的方法(不依赖继承)

      #示例1:

    class Hero:
    def __init__(self,Nikname, Life_value, Aggressivity):
    self.Nikname = Nikname
    self.Aggressivity = Aggressivity
    self.Life_value = Life_value
    def attack(self,enemy):
    enemy.Life_value-=self.Aggressivity

    class Ruiwen(Hero):
    camd = 'demaciy'
    def attack(self, enemy):
    Hero.attack(self, enemy) #指名道姓的方式 。此时,即使没有继承父类,此方法依然有效
    print('from Ruiwen is attack')
    class Kelun(Hero):
    camd = '猪圈'
    pass
    g = Ruiwen('大圣', 100, 30)
    r = Kelun('猪八戒', 80, 50)
    print(r.Life_value)
    g.attack(r)
    print(r.Life_value)
    #输出:

    示例2:

    class Hero:
    def __init__(self,Nikname, Life_value, Aggressivity):
    self.Nikname = Nikname
    self.Aggressivity = Aggressivity
    self.Life_value = Life_value
    def attack(self,enemy):
    enemy.Life_value-=self.Aggressivity

    class Ruiwen(Hero):
    camd = 'demaciy'
    def __init__(self, Nikname, Life_value, Aggressivity, Weapon):
    # self.Nikname = Nikname
    # self.Life_value = Life_value
    # self.Aggressivity = Aggressivity
    self.Weapon = Weapon
    Hero.__init__(self, Nikname, Life_value, Aggressivity)
    def attack(self, enemy):
    Hero.attack(self, enemy) #指名道姓的方式 。此时,即使没有继承父类,此方法依然有效
    print('from Ruiwen is attack')
    class Kelun(Hero):
    camd = '猪圈'
    pass
    g = Ruiwen('大圣', 100, 30, '金箍棒')
    print(g.__dict__)

    #输出:

    
    
    
    

     #2.super()   依赖于继承

    #示例1:

    class Hero:
    def __init__(self,Nikname, Life_value, Aggressivity):
    self.Nikname = Nikname
    self.Aggressivity = Aggressivity
    self.Life_value = Life_value
    def attack(self,enemy):
    enemy.Life_value-=self.Aggressivity

    class Ruiwen(Hero):
    camd = 'demaciy'
    def __init__(self, Nikname, Life_value, Aggressivity, Weapon):
    super().__init__(Nikname, Life_value, Aggressivity)
    self.Weapon = Weapon
    def attack(self, enemy):
    print('from Ruiwen is attack')
    class Kelun(Hero):
    camd = '猪圈'
    pass
    g = Ruiwen('大圣', 100, 30, '金箍棒')
    r = Kelun('猪八戒', 80, 50)
    g.attack(r)
    print(r.Life_value)





    示例2:
    
    
    class Hero:
    def __init__(self,Nikname, Life_value, Aggressivity):
    self.Nikname = Nikname
    self.Aggressivity = Aggressivity
    self.Life_value = Life_value
    def attack(self,enemy):
    enemy.Life_value-=self.Aggressivity

    class Ruiwen(Hero):
    camd = 'demaciy'
    def __init__(self, Nikname, Life_value, Aggressivity, Weapon):
    super().__init__(Nikname, Life_value, Aggressivity)
    self.Weapon = Weapon
    def attack(self, enemy):
    print('from Ruiwen is attack')
    class Kelun(Hero):
    camd = '猪圈'
    pass
    g = Ruiwen('大圣', 100, 30, '金箍棒')
    r = Kelun('猪八戒', 80, 50)
    g.attack(r)
    print(r.Life_value)

    #输出:

    
    



    class A:
    def f1(self):
    print('from A')
    super().f1()
    class B:
    def f1(self):
    print('from B')

    class C(A, B):
    pass
    c = C()
    c.f1()
    print(C.mro())

    #输出:

    #这里不要以为super在A里面 且A为比较顶层,会找不到B里面的f1 这样想是错误的,应当先明白f1是基于谁去寻找的,它是C的实例化对象c去调用的f1

    #然后在A里面找到了f1打印了f1里面的内容,但是随之又遇见super,此时super会基于C的调用f1接着向上从A函数属性里面按照广度查找的方式继续按照mro列表继续向后找,直到

    找到打印为止

     
  • 相关阅读:
    Spring框架:第八章:声明式事务
    Spring框架:第七章:AOP切面编程
    Spring框架:第六章:注解功能
    Jmeter之WebService接口测试
    Jmeter中的参数化常用的几种方式
    Jmeter之定时器
    Jmeter之断言——检查点
    Jmeter重要组件介绍(一)
    Jmeter中之各种乱码问题解决方案
    Jmeter之https请求
  • 原文地址:https://www.cnblogs.com/yuexijun/p/10239091.html
Copyright © 2011-2022 走看看