继承描述的是一种类间关系,一个类A从另外一个类B获取成员信息,称类A继承自类B。python
提供成员信息的类称==父类==(基类),获取成员信息的类称子类(派生类)。bash
子类可使用父类的成员(成员变量,成员方法)dom
class 类名(父类名):
pass
复制代码
class Animal:
pass
class Dog(Animal): # Dog 继承于 Animal
pass
复制代码
使用Python内置属性__mro__能够查看继承关系函数
语法格式:类名.__mro__
复制代码
class Animal(object):
pass
class Dog(Animal): # Dog 继承于 Animal
pass
print(Animal.__mro__)
print(Dog.__mro__)
复制代码
运行结果:ui
"F:\Program Files\Python36\python.exe" H:/python_projects/aircraft_battle/test2.py
(<class '__main__.Animal'>, <class 'object'>)
(<class '__main__.Dog'>, <class '__main__.Animal'>, <class 'object'>)
复制代码
重写指的是:在子类中定义与父类相同名称的成员方法。spa
class Animal(object):
def eat(self):
print("动物须要吃东西")
class Dog(Animal):
def eat(self): # eat 是对父类中的 eat 的重写
print("狗喜欢吃骨头")
dog1 = Dog()
dog1.eat()
复制代码
格式一:
父类名.方法名(对象)
格式二:
super(本类名,对象).方法名()
格式三:
super().方法名()
复制代码
class Animal(object): # object 是全部类的父类
def eat(self):
print("动物须要吃东西")
class Dog(Animal): # Dog 是Animal的子类,继承于Animal
def eat(self):
print("狗喜欢吃骨头")
# 格式一:父类名.方法名(对象)
Animal.eat(self)
# 格式二:super(本类名,对象).方法名()
super(Dog, self).eat()
# 格式三:super().方法名()
super().eat()
dog1 = Dog()
dog1.eat()
复制代码
class 类名(父类名1,父类名2···):
pass
复制代码
class Animal(object):
pass
class Mammal(object):
pass
class Dog(Animal, Mammal): # Dog 同时继承于
pass
复制代码
多继承关系中,当多个父类具备同名的成员,子类调时该成员时先调用继承关系中的第一个声明的类的成员。code
一个对象具备多种形态,在不一样的使用环境中以不一样的形态展现其功能,称该对象具备多态特征。对象
鸭子类型是一种特殊的调用现象,当对象在语法层面可以知足调用关系,但对象并不具备对应的对象形态,称该对象此时具有鸭子类型
鸭子类型是一种特殊的多态表现形式
复制代码
""" 演示反恐精英案例——超级增强版 对三个匪徒 加入开枪射击命中几率 加入开枪伤害值波动 加入鞭尸文字显示效果 分析: -----------------------基础版----------------------- 1.定义人类,描述公共属性 life:100 name:姓名要传参 2.定义出英雄与恐怖分子类 3.定义主函数描述枪战过程 main,建立两个对象 4.定义开枪方法,分红两个方法,Hero Is都有 定义的方法要传入被射击的对象 被射击对象的生命值要进行减小 5.主程序中调用开枪操做 6.开枪操做后,要在主程序中显示每一个人的状态信息 7.定义Person类的__str__方法,用于显示每一个人的状态 8.设置开枪操做为反复操做 再设置中止条件:一方生命值<=0 中止循环使用break -----------------------修复版----------------------- 9.修复英雄的信息显示模式 状态描述 0 - 1- 70 - 99- 100 if..elif.. and组合条件 10.修复生命值为负的问题 射击时若是生命值<伤害值,生命值 = 0,不然正常减生命 -----------------------增强版----------------------- 11.建立三个恐怖份子对象 三个对象都要开枪,三个对象都要打印状态 12.修复结束条件为三个恐怖份子都死亡 三个知足同时死亡 and 13.解决向三个恐怖份子开枪的问题 随机数:random 步骤1:使用random import random 必须写在全部程序的前面 步骤2:使用random.randint(1,3) 能够产生1到3的随机数 产生一个随机数,判断是几就向几号敌人开枪 -----------------------超级增强版----------------------- 14.加入开枪射击命中几率 产生一个随机数,若是在范围内,命中,不然不命中 文字效果要变化 两处开枪都要从新制做 15.加入开枪伤害值波动 产生一个随机数,做为伤害值 16.加入鞭尸文字显示效果 17.修复死亡后还能继续开枪 """
import random
# 定义一个父类 Human
class Human:
def __init__(self, name): # 初始化人物生命值的状态
self.life = 100
self.name = name
def __str__(self):
"""用 def __str__ (self): 加上里面的 if elif ....else 来返回游戏人物的状态"""
if self.life == 100:
num = "无伤"
return "%s暂时%s,剩余生命值是:%s" % (self.name, num, self.life)
elif self.life >= 70:
num = "轻伤"
return "%s已经受了%s,剩余生命值是:%s" % (self.name, num, self.life)
elif self.life >= 1:
num = "重伤"
return "%s已经受了%s,剩余生命值是:%s" % (self.name, num, self.life)
else:
num = "不行了"
return "%s已经%s,剩余生命值是:%s" % (self.name, num, self.life)
# 定义一个子类 Hero 继承于父类 Human 用于定义英雄这一角色。
# hurt 用于表示每次受到的伤害
class Hero(Human):
def fire(self, p):
hurt1 = 40
lucky = random.randint(1, 100)
if lucky >= 1:
hurt1 =100
print("恭喜%s得到98k,无人能挡"% self.name)
root = random.randint(1, 100)
if root >= 1:
if p.life < hurt1:
p.life = 0
print("%s已经死了,请不要鞭尸了" % p.name)
else:
p.life = p.life - hurt1
print("%s向%s开枪,形成了%d点的伤害" % (self.name, p.name, hurt1))
else:
print("%s的枪法真差,没打中,真是浪费子弹" % self.name)
# 定义一个子类 Terrorist 继承于父类 Human 用于定义恐怖分子
class Terrorist(Human):
def fire(self, p):
hurt = 10
# 用随机数函数,random.randint() 加上 if 语句来控制开枪,也就至关于命中率
root = random.randint(1, 100)
if root >= 80:
if p.life < hurt:
p.life = 0
print("%s已经死了,请不要鞭尸了" % p.name)
else:
p.life = p.life - hurt
print("%s向%s开枪,形成了%d点的伤害" % (self.name, p.name, hurt))
else:
print("%s的枪法真差,没打中,真是浪费子弹" % self.name)
# 主函数 控制人物开枪
def main():
hero1 = Hero("**英雄**")
terrorist1 = Terrorist("@恐怖分子@")
terrorist2 = Terrorist("@恐怖分子的儿子@")
terrorist3 = Terrorist("@恐怖分子的女儿@")
# terrorist14 = Terrorist(" ")
while True:
x = random.randint(1, 3)
if hero1.life >= 0:
if x == 1 and terrorist2.life > 0:
hero1.fire(terrorist1)
elif x == 2 and terrorist2.life > 0:
hero1.fire(terrorist2)
elif x == 3 and terrorist2.life > 0:
hero1.fire(terrorist3)
if terrorist1.life > 0:
terrorist1.fire(hero1)
if terrorist2.life > 0:
terrorist2.fire(hero1)
if terrorist3.life > 0:
terrorist3.fire(hero1)
print(hero1)
print(terrorist1)
print(terrorist2)
print(terrorist3)
# 用 if 语句 判断人物是否死亡
if hero1.life <= 0:
print("%s英勇阵亡,枪战结束" % hero1.name)
break
if terrorist1.life <= 0 and terrorist2.life <= 0 and terrorist3.life <= 0:
print("恐怖份子所有死亡,枪战结束")
break
main()
print("第二轮------------------------------------------------")
main()
复制代码