繼承描述的是一種類間關係,一個類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()
複製代碼