码迷,mamicode.com
首页 > 其他好文 > 详细

在子类中重用父类的方法和属性

时间:2018-09-17 23:02:03      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:animal   nbsp   调用   life   ini   elf   name   继承   int   

一、指名道姓法(不依赖继承,直接通过类调用方法和属性)

class Hero:
    def __init__(self, name, life, damage):
        self.name = name
        self.life = life
        self.damage = damage

    def attack(self, enemy):
        enemy.life -= self.damage


class Garen(Hero):
    animal = Garen

    def attack(self, enemy):
        Hero.attack(self, enemy)  # 指名道姓的方式

    def __init__(self, name, life, damage, tree):
        Hero.__init__(self, name, life, damage)
        self.tree = tree


st1 = Garen(盖伦, 100, 40, 大保健)
class Riven(Hero):
        pass


st2 = Riven(锐雯, 100, 50)
print(st2.life)
st1.attack(st2)
print(st2.life)


输出结果:
{name: 盖伦, life: 100, damage: 40, tree: 大保健}
100
60

 

 

二、super()依赖继承

class Hero:
    def __init__(self, name, life, damage):
        self.name = name
        self.life = life
        self.damage = damage

    def attack(self, enemy):
        enemy.life -= self.damage


class Garen(Hero):
    animal = Garen

    def attack(self, enemy):
        super(Garen, self).attack(enemy)   #固定格式super(对象名,self)

    def __init__(self, name, life, damage, web):
        super().__init__(name, life, damage)     #固定格式super()
        self.web = web


st1 = Garen(盖伦, 100, 40, 大保健)
print(st1.__dict__)


class Riven(Hero):
    animal = Noxus


st2 = Riven(锐雯, 100, 50)
print(st2.life)
st1.attack(st2)
print(st2.life)


输出结果:
{name: 盖伦, life: 100, damage: 40, web: 大保健}
100
60

 

 

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())

a = C()
a.f1()


输出结果:
[<class __main__.C>, <class __main__.A>, <class __main__.B>, <class object>]
from A
from B

super是根据mro的顺序来找方法,先找A类,然后找到super时,在A顺序的基础上去找B的f1方法

 

在子类中重用父类的方法和属性

标签:animal   nbsp   调用   life   ini   elf   name   继承   int   

原文地址:https://www.cnblogs.com/huizaia/p/9665309.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!