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列表继续向后找,直到

    找到打印为止

     
  • 相关阅读:
    发送带SMTP身份认证的电子邮件
    将class文件打包成可执行文件
    迈入本本一族
    关于Java的一些 工具,类库,框架......
    Java中用Servlet容器实现程序监听
    用JDOM读写XML
    Firefox丰富多彩的插件
    DIV居中——不大不小的问题
    羽绒外套
    pku1469 COURSES
  • 原文地址:https://www.cnblogs.com/yuexijun/p/10239091.html
Copyright © 2011-2022 走看看