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

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

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

    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())
  • 相关阅读:
    关于DotNETStruts
    SQL语句导入导出大全
    一个打印Dataset的.net的打印类
    遍历指定文件夹下所有的文件
    SQL Server SQL导入导出语句
    查看OCX的属性和方法的脚本
    关于写文本文件的问题
    新钶信息系统面试
    【POJ1208】The Blocks Problem
    【POJ1363】Rails
  • 原文地址:https://www.cnblogs.com/Mryang123/p/8592595.html
Copyright © 2011-2022 走看看