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


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

    方式一:指名道姓(不依赖继承)

    class Hero:
        def __init__(self,name,damage,zing):
            self.name = name
            self.damage = damage
            self.zing = zing
    
        def attack(self,enemy):
            enemy.zing -= self.damage
    
    class Yang(Hero):
        def attack(self,enemy):
            Hero.attack(self,enemy) #指名道姓的重用方法,可以在非继承的情况下使用
            print("from Yang Class")
        pass
    
    class Lin(Hero):
        pass
    
    g1 = Yang('杨学伟',100,100)
    r1 = Lin('林书行',100,200)
    
    print(r1.zing)
    g1.attack(r1)
    print(r1.zing)
    函数属性的重用
    __init__方法的重用

    方式二:super(依赖继承)

    class Hero:
        def __init__(self,name,damage,zing):
            self.name = name
            self.damage = damage
            self.zing = zing
    
        def attack(self,enemy):
            enemy.zing -= self.damage
    
    class Yang(Hero):
        def attack(self,enemy):
            super(Yang,self).attack(enemy) #super(Yang,self)是一个对象 ,依赖于继承
            print("from Yang Class")
        pass
    
    class Lin(Hero):
        pass
    
    g1 = Yang('杨学伟',100,100)
    r1 = Lin('林书行',100,200)
    
    print(r1.zing)
    g1.attack(r1)
    print(r1.zing)
    函数属性的重用
    class Hero:
        def __init__(self,name,damage,zing):
            self.name = name
            self.damage = damage
            self.zing = zing
        def attack(self,enemy):
            enemy.zing -= self.damage
    
    class Yang(Hero):
        def __init__(self,name,damage,zing,weapon):
            # self.name = name
            # self.damage = damage
            # self.zing = zing
            # Hero.__init__(self,name,damage,zing)
            super(Yang,self).__init__(name,damage,zing) #super是一个对象,所以再绑定方法的时候不用加第一个参数
            self.weapon = weapon
    
        def attack(self,enemy):
            Hero.attack(self,enemy) #指名道姓的重用方法,可以在非继承的情况下使用
            print("from Yang Class")
        pass
    
    g1 = Yang('杨学伟',100,100,'圣剑')
    print(g1.__dict__)
    __init__方法的重用

    super练习

    #super
    class A:
        def f1(self):
            print("from A")
            super(A,self).f1() #super是基于C类的mro往后面寻找,而不A类的mro,所以可以去绑定B类的f1方法
    
    class B:
        def f1(self):
            print("from B")
    
    class C(A,B):
        pass
    
    c = C()
    c.f1()
    # print(C.mro())
  • 相关阅读:
    015.Python基础--模块
    014.Python基础--格式化输入输出
    013.Python基础--异常/错误处理
    012.Python基础--装饰器深入
    011.Python基础--装饰器
    010.Python基础--生成器
    汇编的角度分析指针-03(字符串深入理解)
    汇编的角度分析C语言的指针-02
    汇编的角度分析C语言的switch语句
    分析C语言的字节对齐
  • 原文地址:https://www.cnblogs.com/Mryang123/p/8592595.html
Copyright © 2020-2023  润新知