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