python高级2
面向?qū)ο?/h1>
1.類的定義
語法
class 類名():屬于該類的屬性和行為
縮進(jìn)也是四個空格
2.屬性的定義
# 屬性的定義 # 屬性分為:靜態(tài)屬性和實(shí)例屬性 # 靜態(tài)屬性指的實(shí)例對象所共有的屬性 # 實(shí)例屬性指的每一個實(shí)例對象所獨(dú)有的屬性 # self指的是實(shí)例化對象本身 class Tiger():# 靜態(tài)屬性name = "老虎"# 體重(實(shí)例屬性)def __init__(self, w):# 屬性的定義個變量有點(diǎn)類似self.w = w# # 輸出老虎的體重,# print(self.w) # 要產(chǎn)生對象,其實(shí)就是根據(jù)類進(jìn)行實(shí)例化而已 # 在類的實(shí)例化的時候,會執(zhí)行初始化方法init print("----------------------------------") t1 = Tiger(200) # 實(shí)例屬性 print("t1的體重:", t1.w) # 訪問靜態(tài)屬性:1、通過實(shí)例化對象訪問t1.name 2.也可以通過 類名.屬性名 訪問靜態(tài)屬性 print("name靜態(tài)屬性的值為:", t1.name) print("name靜態(tài)屬性的值為:", Tiger.name)3.方法的定義
# 方式對應(yīng)的就是行為,其實(shí)是使用函數(shù)來表示 """ 靜態(tài)方法:靜態(tài)方法就是所有的實(shí)例對象所共有的方法 實(shí)例方法:每一個實(shí)例對象所獨(dú)有的方法,實(shí)例方法方法名后面的括號中self指的是實(shí)例化對象本身 類方法:針對整個類而言的, 類方法中可以訪問靜態(tài)屬性 判斷那個方法要定義成那種類型:根據(jù)是否要操作實(shí)例屬性做判斷。如果方法要使用實(shí)例屬性,則是實(shí)例方法 實(shí)例方法中可以訪問實(shí)例屬性、靜態(tài)屬性 但是靜態(tài)方法中,不能訪問實(shí)例屬性,只能訪問靜態(tài)屬性 """ class Tiger():# 靜態(tài)屬性name = "老虎"# 體重(實(shí)例屬性)def __init__(self, w):# 屬性的定義個變量有點(diǎn)類似self.w = w# 喂食的方法def food(self, feed):# 判斷if feed == "meet":print("喂對了,動物的體重加10斤")# 訪問實(shí)例屬性self.w += 10else:print("喂錯了,動物的體重減10斤")self.w -= 10# 叫聲def roar(self):print(f"{Tiger.name}wow!!!wow!!!wow!!!")self.w -= 5# 靜態(tài)方法@staticmethoddef jump():print(f"{Tiger.name}都會跳躍&&&&&")# 類方法@classmethoddef a(cls):# 在類方法中訪問靜態(tài)屬性有兩種方法,1. 類名.靜態(tài)屬性 2.cls.靜態(tài)屬性# 之所以會有兩種寫法是因?yàn)?cls其實(shí)指的就是這個類# print(Tiger.name)print(cls.name)print("我是一個類方法") # 實(shí)例化產(chǎn)生對象 t1 = Tiger(200) # 通過實(shí)例化對象能不能訪問實(shí)例方法呢? t1.roar() t1.food("meet") # 訪問靜態(tài)方法:靜態(tài)方法有兩種訪問的方式 1. 實(shí)例化對象.靜態(tài)方法名 2.類名.靜態(tài)方法名 t1.jump() Tiger.jump() # 類方法的使用 : 1. 實(shí)例化對象.類方法名 2. 類名.類方法名 t1.a() Tiger.a()4.對象的組合
# 房間類: # 對象的組合的時候,是將小對象當(dāng)做大對象的一個屬性傳入即可 class Tiger():# 靜態(tài)屬性name = "老虎"# 體重(實(shí)例屬性)def __init__(self, w):# 屬性的定義個變量有點(diǎn)類似self.w = w# 喂食的方法def food(self, feed):# 判斷if feed == "meet":print("喂對了,動物的體重加10斤")# 訪問實(shí)例屬性self.w += 10else:print("喂錯了,動物的體重減10斤")self.w -= 10# 叫聲def roar(self):print(f"{Tiger.name}wow!!!wow!!!wow!!!")self.w -= 5# 靜態(tài)方法@staticmethoddef jump():print(f"{Tiger.name}都會跳躍&&&&&") class Room():def __init__(self, num, animal):# 房間號self.num = num# 房間中的動物self.animal = animal # 實(shí)例化出來一只老虎 t1 = Tiger(200) # 實(shí)例化房間類 r1 = Room(1, t1) # 訪問動物的靜態(tài)屬性 print(r1.animal.name) # 訪問動物的實(shí)例屬性 print(r1.animal.w) # 調(diào)用老虎的相關(guān)方法 r1.animal.food("grass")5.繼承
語法:
# 東北虎 class NeTiger(Tiger):def __init__(self,w):Tiger.__init__(self, w) # 對象的繼承 # 子類繼承父類, 一個父類可以有多個子類,一個子類可以繼承多個父類 # 子類繼承了父類就擁有了父類的一切屬性和方法 # 老虎 東北虎、華南虎、孟加拉虎、西伯利亞虎 class Tiger():# 靜態(tài)屬性name = "老虎"# 體重(實(shí)例屬性)def __init__(self, w):# 屬性的定義個變量有點(diǎn)類似self.w = w# 喂食的方法def food(self, feed):# 判斷if feed == "meet":print("喂對了,動物的體重加10斤")# 訪問實(shí)例屬性self.w += 10else:print("喂錯了,動物的體重減10斤")self.w -= 10# 叫聲def roar(self):print(f"{Tiger.name}wow!!!wow!!!wow!!!")self.w -= 5# 靜態(tài)方法@staticmethoddef jump():print(f"{Tiger.name}都會跳躍&&&&&")# 類方法@classmethoddef a(cls):# 在類方法中訪問靜態(tài)屬性有兩種方法,1. 類名.靜態(tài)屬性 2.cls.靜態(tài)屬性# 之所以會有兩種寫法是因?yàn)?cls其實(shí)指的就是這個類# print(Tiger.name)print(cls.name)print("我是一個類方法") # 東北虎 class NeTiger(Tiger):def __init__(self,w):Tiger.__init__(self, w) # 華南虎 class ScTiger(Tiger):def __init__(self, w):Tiger.__init__(self, w) # 實(shí)例化產(chǎn)生一只東北虎 # net1 = NeTiger(220) # # # 調(diào)用靜態(tài)屬性 # print(net1.name) # # 實(shí)例屬性 # print(net1.w) # # # 訪問靜態(tài)方法 # net1.jump() # # # 訪問實(shí)例方法 # net1.roar() set1 = ScTiger(200) print(set1.name) print(set1.w) set1.roar() set1.jump()6.重定義
# 重定義:子類繼承父類之后,覺得父類的某個方法不能滿足自己,就需要對該方法進(jìn)行重新定義, # 重定義的時候,對于父類的方法的改變只僅限于該子類 class Tiger():# 靜態(tài)屬性name = "老虎"# 體重(實(shí)例屬性)def __init__(self, w):# 屬性的定義個變量有點(diǎn)類似self.w = w# 喂食的方法def food(self, feed):# 判斷if feed == "meet":print("喂對了,動物的體重加10斤")# 訪問實(shí)例屬性self.w += 10else:print("喂錯了,動物的體重減10斤")self.w -= 10# 叫聲def roar(self):print(f"{Tiger.name}wow!!!wow!!!wow!!!")self.w -= 5# 靜態(tài)方法@staticmethoddef jump():print(f"{Tiger.name}都會跳躍5米")# 類方法@classmethoddef a(cls):# 在類方法中訪問靜態(tài)屬性有兩種方法,1. 類名.靜態(tài)屬性 2.cls.靜態(tài)屬性# 之所以會有兩種寫法是因?yàn)?cls其實(shí)指的就是這個類# print(Tiger.name)print(cls.name)print("我是一個類方法") # 東北虎 class NeTiger(Tiger):name = "東北虎"def __init__(self, w):Tiger.__init__(self, w)@staticmethoddef jump():print(f"都會跳躍3米") # 華南虎 class ScTiger(Tiger):def __init__(self, w):Tiger.__init__(self, w) print("______________老虎_____________") t1 = Tiger(200) t1.jump() print(t1.name) print("_____________東北虎______________") n1 = NeTiger(100) n1.jump() print(n1.name) print("_____________華南虎______________") s1 = ScTiger(200) s1.jump() print(t1.name)7.面向?qū)ο笕筇卣?/h2>
- 繼承
- 封裝
- 多態(tài)
import random
import time
class Tiger():# 靜態(tài)屬性name = "老虎"# 體重(實(shí)例屬性)def __init__(self, w):# 屬性的定義個變量有點(diǎn)類似self.w = w# 喂食的方法def food(self, feed):# 判斷if feed == "meet":print("喂對了,動物的體重加10斤")# 訪問實(shí)例屬性self.w += 10else:print("喂錯了,動物的體重減10斤")self.w -= 10# 叫聲def roar(self):print(f"{Tiger.name}wow!!!wow!!!wow!!!")self.w -= 5
class Sheep():# 靜態(tài)屬性name = "羊"# 定義一個實(shí)例屬性def __init__(self, w):self.w = w# 實(shí)例方法def food(self, feed):if feed == "grass":print("喂對了,體重加10斤")self.w += 10else:print("喂錯了,體重減10斤")self.w -= 10def roar(self):print("miemiemiemiemiemie")self.w -= 5
class Room():def __init__(self, num, animal):# 房間號self.num = num# 房間中的動物self.animal = animal
# 定義一個列表,用于保存房間對象
rooms = []
# 產(chǎn)生10個房間
for i in range(1, 11):# 隨機(jī)產(chǎn)生羊或者老虎flage = random.randint(0, 1)if flage == 0:a = Tiger(200)else:a = Sheep(100)# 實(shí)例化出來房間對象rooms.append(Room(i, a))
# 獲取游戲開始時間
start_time = time.time()
print("游戲即將開始,將進(jìn)行倒計時:")
while True:# 獲取游戲結(jié)束時間end_time = time.time()if end_time - start_time >= 20:print("游戲即將結(jié)束。。。。")# 輸出房間動物信息for r in rooms:print(f"第{r.num}號房間的動物是{r.animal.name},動物的體重是:{r.animal.w}")break# 隨機(jī)彈出一個房間r1 = random.choice(rooms)print(f"本次彈出的是{r1.num}號房間")# 選擇是否要敲門f = input("請選擇是否敲門:輸入y:")if f == "y":# 調(diào)用敲門的實(shí)例方法r1.animal.roar()# 不需要敲門,則可以直接喂食feed = input("請輸入食物:")# 調(diào)用喂食的方法r1.animal.food(feed)
總結(jié)
- 上一篇: SNIP算法详解(极端尺寸目标检测)
- 下一篇: 【Python】通过 Python 设置