类的继承

继承

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 + "获得胜利")
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 继承(extends)是面向对象开发方法中非常重要的一个特征,继承体现着现实世界中“一般”与“特殊”的关系。对于拥...
    yangsg阅读 3,916评论 0 8
  • 一、私有化 1、常说的访问权限 私有的:在类的外部不可以使用,也不可以继承 保护的:在类的外部不可以使用,可以继承...
    ququququ阅读 395评论 0 0
  • 本页包含内容: [TOC] 类里面的所有存储型属性——包括所有继承自父类的属性——都必须在构造过程中设置初始值。 ...
    伍哥___阅读 618评论 0 0
  • 继承 面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指:可以使用现有类的所有功能,并无需重新编写...
    fanhang64阅读 550评论 0 4
  • 我是樊登读书会南昌分会小青琴~今天是我参加“每天一篇文章”连续写作的第37天。 在之前的一篇文章里,我提出了一个我...
    小青琴阅读 359评论 0 0

友情链接更多精彩内容