python基础(第九章)面向对象
print('---面向對象-----')
'''
知識點匯總
1-面向對象的引入:
??? 1-先找出相應的對象
??? 2-把這些涉及的對象的關系進行組網
2-類/實例
??? 1-類:
??????? 1-現實不存在--抽象的概念--人類--鳥類
??????? 2-一類具有相同特征的事物的統稱!
??? 2-類里面有
??????? 1-靜態---屬性(特征)---變量
??????? 2-動態---方法(行為)---函數
3-實例---也叫 對象
??? 1-在這個類里面實際存在的個體
??? 2-類是實例的抽象化概念
??? 3-實例是類的具體實例化體現??????
4-實例化操作:???????
??? 1-類里面的變量--屬性
??? 2-類里面的函數--方法
??? 3-創建實例 t1 = Tiger()??
5-靜態屬性和實例屬性
??? 1-靜態屬性:
??????? 1-也叫類屬性
??????? 2-它屬于整個類的
??????? 3-用法:1-類.屬性??? 2-實例.屬性
??? 2-實例屬性:
??????? 1-這個屬性是? 那個實例的,不屬于整個類---其他實例不能共享??
??????? 2-定義在 初始化方法 __init__ 里
??????? 3-一般在創建實例的時候就給定
??????? 4-只要創建實例--def __init__(self):初始化方法肯定會調用
??????? 5-self 只是代表詞,并不是關鍵字--可以替換,但不建議替換!不能缺省
? ??????6-id(self)
??????? 7-實例化屬性---只能??? 實例.屬性
??????? 8- self 這個實例的本身
6-方法:
??? 1-靜態方法
??????? 1-屬于整個類
??????? 2-類可以直接調用,不需要實例化 ----類.方法 / 實例.方法
??????? 3-用 @staticmethod 修飾 只能修飾緊跟的那一個
??? 2-實例方法:
??????? 1-有self?
??????? 2- 實例.方法
7-取隨機數
??? from random? import randint
??? randint(0,2)--取 0 1 2 閉區間
8-時間處理:
??? 1- import time
?????? time.time()---單位是s 秒?? 從1970算起
9-繼承
??? 1-繼承關系可以是多個父類
??? 2-重寫--在父類跟子類之間的一個多態的體現!
??? 3-在重寫情況下,調用父類的方法
??????? super(SouTiger,s1).roar()
??????? super(子類類名,子類的實例名).roar()
??? 4- __name??? 私有屬性
'''
'''
游戲分解:
??? 1- 找出涉及的對象:類
??????? 1- 房間
??????? 2- 羊
??????? 3- 老虎
??????????? 1- 俗稱:特征--專業術語--屬性;本質:變量
??????????????? 1- 胖瘦--*體重---實例屬性
??????????????? 2- 外貌
??????????????? 3- 叫聲--*
??????????????? 4- 大小
?????????? ?????5- 年齡
??????????????? 6- 統稱
??????????? 2- 俗語:行為---專業術語:方法;本質是--函數
??????????????? 1- 吃---*實例屬性
??????????????? 2- 跑
??????????????? 3- 睡
??????????????? 4- 叫--*實例屬性
??? 2- 組織關系
??
??
'''
'''
1- 屬性:
??? 1- 靜態屬性--整個類的實例共有的
??????? 1- 調用:
??????????? 實例.屬性
??????????? 類.屬性
??? 2- 實例屬性:每一個實例都可以不一樣---體重/名字
??????? 1- 使用__init__(self)--初始化方法--構造方法
??????? 2- 調用:
??????????? 1- 實例.屬性
??????????? 2- 類.屬性---不能
???
2- 方法:
'''
class Tiger:
??? className = '老虎'#屬性---本質就是變量屬于---類---靜態(類)屬性--這個類的實例共有
??? __height = 120#私有
??? def __init__(self,inWeight):#初始化方法-只要創建實例就一定會調用?? t1---傳給self
??????? print('我被執行了',inWeight)
??????? self.weight = inWeight
??? #實例方法--告訴體重
??? def tell_weight(self):
??????? print('我的體重是{}'.format(self.weight))
??? #叫---形參帶self---實例方法
??? def roar(self):
??????? print('wow!---體重減5斤')
??????? self.weight -= 5
??? #喂食
??? def feed(self,food):
??????? if food == '肉':
??????????? self.weight += 10
??????????? print('喂食正確,體重增加10斤')
??????? else:
??????????? self.weight -= 10
??????????? print('喂食錯誤,體重減少10斤')
??? #靜態方法---共有---沒有self
??? @staticmethod#只能保緊跟著的一個
??? def static_roar():
??????? print('父類的靜態方法---wow!')
class Sheep:
??? pass
class Room:
??? def __init__(self,inNum,inAnimal):
??????? self.num = inNum
??????? self.animal = inAnimal
#創建實例---t1--
# t1 = Tiger(100)
#繼承----功能擴展----減少代碼的重編碼--減少重復
class SouTiger(Tiger):
??? def __init__(self,inweight,inAge):
??????? Tiger.__init__(self,inweight)
??????? self.age = inAge
??? @staticmethod#只能保緊跟著的一個
??? def static_roar():
??????? print('子類的靜態方法---wow!')
s1 = SouTiger(150,20)
print(s1.weight)
s1.static_roar()#直接調用是子類的
super(SouTiger,s1).static_roar()#調用父類的方法? super(子類的類名,子類的實例名).方法
Tiger.static_roar()
# print(s1.className)
# print(s1.age)
# print(s1.__height)
# # t1.roar()
# # t1.feed('草')
# # t1.tell_weight()
# #
# # Tiger.static_roar()
# # t1.static_roar()
#
#
# r1 = Room(1,t1)
#
# r1.animal.roar()
#
# #隨機數處理
# from random import randint
# print(randint(0,2))#左右都包含
#
#
# roomList = []#10個房間實例
# for num in range(1,11):
#???? if randint(0,1) == 0:
#???????? ani = Tiger()
#???? else:
#???????? ani = Sheep()
#???? room = Room(num,ani)
#???? roomList.append(room)
#
# namelist = ['tom','jack']
# print(namelist[randint(0,len(namelist)-1)])
#
#
# import time
# # print(time.time())#單位是s 從1970---至今
#
#
# startTime = time.time()
# while True:
#???? curTime = time.time()
#???? if curTime - startTime > 120:
#???????? break
# t2 = Tiger()
#
# t2.tell_weight()
# print(Tiger.weight)#不能操作
# print(t1.className)
# t2 = Tiger()
# print(t2.className)
# print(Tiger.className)
?
?
擴展知識點—多繼承
# 多繼承--方法重寫--
class SouTiger(Tiger,Sheep):#華南虎---繼承特點:便于擴展--提高效率--減少編碼量
??? # def __init__(self):
??? #???? Tiger.__init__(self,inWeight=200)
??? @staticmethod
??? def static_roar():
??????? print('子類的----叫方法')
??? def feed(self,food):
??????? print('子類的實例方法-----')
#1- 調用指定父類靜態方法
#父類類名.方法(子類的實例名)
Tiger.static_roar()
#2- 調用指定父類實例方法--Sheep
super(Tiger,s1).feed('')
resList = []#存儲結果? [[類型1,大小1],[類型2,大小2],[類型3,大小3]]
resDict = {}#{'類型1':大小,'類型2':大小}
lines = log.split('\n')
del lines[0],lines[-1]
for line in lines:
??? infoList = line.split('\t')#list
??? fileType = infoList[0].split('.')[1].strip()
??? fileSize = int(infoList[1].strip())#轉換類型
??? #2- 同類型統計---最簡單方法----字典做!
??? if fileType not in resDict:#如果沒改類型--新增
??????? resDict[fileType] = fileSize
??? else:#累加
??????? resDict[fileType] += fileSize
??? inFlag = False#默認不存在---需要進過遍歷去核實該類型存不存在
??? #先查找--匹配看有沒有該類型
??? for one in resList:#list
??????? if fileType == one[0]:
??????????? one[1] += fileSize #累加大小
??????????? inFlag = True#表示狀態--有---print('該類型存在')
??????????? break#匹配完成,后續不需要匹配
??? if inFlag == False:
??????? resList.append([fileType,fileSize])
print(resDict)
print(resList)
?
總結
以上是生活随笔為你收集整理的python基础(第九章)面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html dom ready,【js】实
- 下一篇: Python之Excel编辑-[小试牛刀