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】实
- 下一篇: 正则化最小二乘法——神经网络与机器学习笔
