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

    在子类派生出新发方式中重用父类的方法,有两种实现方式
    1.指名道姓(不依赖继承)
    # class Hero:
    # def __init__(self,nickname,life_value,aggresivity):
    # self.nickname=nickname
    # self.life_value=life_value
    # self.aggresivity=aggresivity
    # def attack(self,enemy):
    # enemy.life_value-=self.aggresivity
    #
    # class Garen(Hero):
    # camp='demacia'
    # def __init__(self,nickname,life_value,aggresivity,weapon):
    # Hero.__init__(self,nickname,life_value,aggresivity)
    # self.weapon=weapon
    #
    # def attack(self,enemy):
    # Hero.attack(self,enemy) #1,指名道姓
    # print('from Garen class')
    #
    # class Riven(Hero):
    # camp='NOXUS'
    #
    #
    # g=Garen('草丛伦',100,30,'金箍棒')
    # r=Riven('锐雯雯',80,35)
    # print(g.__dict__)
    # print(r.life_value)
    # g.attack(r)
    # print(r.life_value)



    '''
    # 2.super() (依赖继承)
    class Hero:
    def __init__(self,nickname,life_value,aggresivity):
    self.nickname=nickname
    self.life_value=life_value
    self.aggresivity=aggresivity
    def attack(self,enemy):
    enemy.life_value-=self.aggresivity

    class Garen(Hero):
    camp='demacia'
    def attack(self,enemy):
    super(Garen,self).attack(enemy)    #依赖继承
    print('from Garen class')


    class Riven(Hero):
    camp='Noxus'
    g=Garen('草丛伦',100,30)
    r=Riven('锐雯雯',80,35)
    g.attack(r)
    print(r.life_value)
    '''

    '''
    class Hero:
    def __init__(self,nickname,life_value,aggresivity):
    self.nickname=nickname
    self.life_value=life_value
    self.aggresivity=aggresivity
    def attack(self,enemy):
    enemy.life_value-=self.aggresivity

    class Garen(Hero):
    camp='demacia'
    def __init__(self,nickname,life_value,aggresivity,weapon):
    # self.nickname = nickname
    # self.life_value = life_value
    # self.aggresivity = aggresivity
    # self.weapon = weapon
    # Hero.__init__(self,nickname,life_value,aggresivity)
    #super(Garen,self).__init__(nickname,life_value,aggresivity) #依赖继承

    super().__init__(nickname,life_value,aggresivity) #依赖继承(Python3)
    self.weapon=weapon


    def attack(self,enemy):
    Hero.attack(self,enemy) #指名道姓重用
    print('from Garen class')

    class Riven(Hero):
    camp='NOXUS'


    g=Garen('草丛伦',100,30,'金箍棒')
    r=Riven('锐雯雯',80,35)
    print(g.__dict__)
    print(r.life_value)
    g.attack(r)
    print(r.life_value)
    '''
    那么super是怎么实现在父类中查找的呢
    一个小验证方法:

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

    class B:
    def f1(self):
    print('from B')

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

    [<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]  #C.mro() c的查找顺序,新式类(python3特有)

    from A    

    from B

    以上看出父类重用,是子类以mro()的顺序查找的,不论父类之间有没有继承关系
    PS mro()'老子才不管你老子是谁,老子只按老子的查找顺序查找'
     
  • 相关阅读:
    结对项目——四则运算
    关于结对编程的感想
    《诗词大闯关》调查表与调查结果分析
    我的软件工程课目标
    我的软件工程课目标
    软件工程课程建议
    结对编程(二)
    结对编程——四则运算
    结对编程
    《诗词大闯关》问卷调查心得与体会
  • 原文地址:https://www.cnblogs.com/sunny666/p/9641022.html
Copyright © 2011-2022 走看看