类的继承

继承

python支持多继承,继承内容与继承顺序相关,所有的类都会默认继承object类

class A:
    def __init__(self):
        self.name = 'A'
    def print_test(self):
        print("This is A")
class B:
    def __init__(self):
        self.name = 'B'
class C(A, B):
    def __init__(self):
        super().__init__()
        self.age = 20
    def print_test(self):
        super(C, self).print_test()
        print("This is C")

c = C()
c.print_test()

# 调用属性或方法的查找顺序
print(C.__mro__)

#组合优于继承
class D:
    def __init__(self):
        self.a = A()
    def print_test(self):
        self.a.print_test()
        print("This is D")
d = D()
d.print_test()
# isinstance(x, y)判断x是否是y的实例
# 对象是某个类的实例,就是它的父类的实例
print(isinstance(c, B))
print(isinstance(c, A))
print(isinstance(c, C))
# issubclass(x, y) 判断x是否是y的子类
print(issubclass(C, A))

模拟决斗

import random
class Sprite():
    def __init__(self, name, power, blood):
        self.name = name
        self.power = power
        self.blood = blood
    def attack(self, enemy):
        minus = random.randrange(self.power-5, self.power+5)
        if enemy.has_living():
            enemy.minus_blood(minus)
    def minus_blood(self, num):
        self.blood -= num
    def has_living(self):
        if self.blood > 0:
            return True
        else:
            return False

m = Sprite("哥斯拉", 10, 100)
h = Sprite("凹凸曼", 12, 120)
while m.has_living() and h.has_living():
    m.attack(h)
    h.attack(m)

if m.has_living():
    print(m.name + "获得胜利")
if h.has_living():
    print(h.name + "获得胜利")

用继承重写决斗

import random
class Sprite():
    def __init__(self, name, power, blood):
        self.name = name
        self.power = power
        self.blood = blood
    def attack(self, enemy):
        minus = random.randrange(self.power-5, self.power+5)
        if enemy.has_living():
            enemy.minus_blood(minus)
    def minus_blood(self, num):
        self.blood -= num
    def has_living(self):
        if self.blood > 0:
            return True
        else:
            return False
class Monster(Sprite):
    pass
class Hero(Sprite):
    def attack(self, enemy):
        minus = random.randrange(self.power - 5, self.power + 5)
        i = random.randrange(0,100)
        if enemy.has_living():
            if i < 50:
                enemy.minus_blood(self.power + 200)
            else:
                enemy.minus_blood(minus)
m = Monster("哥斯拉", 10, 100)
h = Hero("凹凸曼", 12, 120)
while m.has_living() and h.has_living():
    m.attack(h)
    h.attack(m)

if m.has_living():
    print(m.name + "获得胜利")
if h.has_living():
    print(h.name + "获得胜利")

你可能感兴趣的:(类的继承)