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

    找到打印为止

     
  • 相关阅读:
    页面加载完后要执行的代码
    作为90后迈向成为一个优秀的男人系列之一
    今天看的一本书关于复制威力总结
    Ext.Net弹出窗口回写父窗口
    div 显示滚动条与div显示隐藏的CSS代码
    你可以向马云学习什么
    灵活多变的工作台页面配置Spring.Net.Framwork春天快速开发平台
    ROW_NUMBER() OVER函数的基本用法
    EXTJS4官方文档翻译系列一:类系统和编码规范
    SQLserver2008全文检索使用方法
  • 原文地址:https://www.cnblogs.com/yuexijun/p/10239091.html
Copyright © 2011-2022 走看看