• 在子类中重用父类的属性


    在子类派生出的新的方法中重用父类的方法,有两种实现方式

    一、指名道姓(不依赖继承)

    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 Libai(Hero):
        camp = "Tangchao"
        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)  # 指名道姓,有几个参数就需要传几个参数
            print("from Libai Class")
    
    class Huamulan(Hero):
        camp = "Changcheng"
    
    l1 = Libai("进一步",100,60,"")

    二、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 Libai(Hero):
        camp = "Tangchao"
        def __init__(self,nickname,life_value,aggresivity,weapon):
            #Hero.__init__(self,nickname,life_value,aggresivity)
    
            #super(Libai,self).__init__(nickname,life_value,aggresivity)  # python2的写法
            super().__init__(nickname,life_value,aggresivity)  # python3的写法
            self.weapon = weapon
        def attack(self,enemy):
            super(Libai,self).attack(enemy)  # 依赖继承  super(Libai,self)是指对象,.attack是调用对象的方法
            print("from Libai Class")
    
    class Huamulan(Hero):
        camp = "Changcheng"
    
    l1 = Libai("进一步",100,60,"")

    这两种方式的区别是:方式一是跟继承没有关系的,而方式二的super()是依赖于继承的,并且即使没有直接继承关系,super仍然会按照mro继续往后查找

    #A没有继承B,但是A内super会基于C.mro()继续往后找
    class A:
        def test(self):
            super().test()
    class B:
        def test(self):
            print('from B')
    class C(A,B):
        pass
    
    c=C()
    c.test() #打印结果:from B
    
    
    print(C.mro())
    #[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
  • 相关阅读:
    设置 menu 菜单 监听
    在 flash.net.FileReference 上找不到属性 save,且没有默认值。
    swf获取当前页面的路径
    控制舞台缩放比例
    相对于自身的坐标位移
    tweenmax
    exe文件反编译为源文件
    spring 整合 spring mvc
    springmvc学习第四天
    springmvc学习第三天
  • 原文地址:https://www.cnblogs.com/nanjo4373977/p/12176028.html
Copyright © 2020-2023  润新知