什么是面向?qū)ο螅?/p>
面向?qū)ο缶幊淌且环N編程方式,此編程方式的落地需要使用 “類” 和 “對象” 來實現(xiàn),所以,面向?qū)ο缶幊唐鋵嵕褪菍?“類” 和 “對象” 的使用。
為什么要定義面向?qū)ο螅?/p>
創(chuàng)建自己的對象(尤其是類型或者被稱為類的對象)是python的核心概念——非常核心
類(class):所謂類就是用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象就是類的實例。面向?qū)ο笫且环N編程思想,就是一種解決問題的思路,將項目中不同的數(shù)據(jù),封裝成類型來進行使用。是對面向過程編程思想的補充和完善。b) 面向?qū)ο螅凶约旱娜筇卣鳎庋b、繼承、多態(tài)
對象:對象,就是實際存在的物體,也稱為實體,是類型表示具體的實際存在一個實例,所謂一切皆對象
類和對象有什么區(qū)別?
類是對象的抽象概念 對象是類的實例表現(xiàn)
類的定義
類一般有類型名稱、屬性、方法(行為)組成,通過class關鍵字,來定義一個自定義類型,通過init()函數(shù),來初始化類的屬性數(shù)據(jù),通過普通函數(shù),定義類的行為方法
如何去創(chuàng)建對象?
與執(zhí)行函數(shù)一樣,直接通過類的名稱來創(chuàng)建對象。如s=Student()
創(chuàng)建的對象,使用對象的屬性
對象的屬性,可以直接通過‘對象的引用變量-屬性名稱’來使用,如u.username
創(chuàng)建的對象,使用對象的方法
對象的方法可以接通過‘對象的引用變量-屬性名稱’來調(diào)用
創(chuàng)建對象的過程
創(chuàng)建對象會調(diào)用對象的new()函數(shù),來申請內(nèi)存,來進行對象的創(chuàng)建,然后給創(chuàng)建好的獨享,初始化對象的數(shù)據(jù),自動調(diào)用init()函數(shù),給對象的屬性賦值
創(chuàng)建好的對象,賦值給了一個變量,變量是什么類型?存放的是什么數(shù)據(jù)?
(1)變量 = 類名稱() 創(chuàng)建了一個對象,將對象的引用地址,賦值給了變量
(2)變量(內(nèi)存地址)----->堆內(nèi)存中的對象
(3)type(變量)------->類類型
下面是一個小程序來理解面向?qū)ο笾械念惻c對象、屬性
自制燒烤:烤牛肉
抽象類名稱:牛排
抽象類的屬性:熟度描述、烤牛排時間、佐料
抽象類的方法:燒烤、添加佐料
設計過程:定義類型、創(chuàng)建牛排對象、燒烤。
源代碼如下:
class Beef(object):
如果創(chuàng)建對象的時候,對象的某些屬性就具備固定的值,此時不需要傳遞參數(shù)直接使用默認值即可
這里的燒烤牛排,熟度、燒烤時間、佐料都是牛排都是牛排固有的屬性即使用默認值
|
def __init__(self):
self.cookedDesc="生的"
self.cookedInt=0
self.seasoning=[]#調(diào)料
#定義一個天加佐料的方法
def addSeasoning(self,s):
self.seasoning.append(s)
#字符串轉(zhuǎn)換 解決輸出只顯示內(nèi)存問題
def __str__(self):
return "熟度:%s;燒烤時間:%s;佐料:%s;"%(self.cookedDesc,self.cookedInt,self.seasoning)
^返回值的調(diào)用
#定義一個燒烤的行為
def bbq(self,time):
self.cookedInt +=time
if(self.cookedInt>0)and(self.cookedInt<=2):
self.cookedDesc="一分熟"
elif(self.cookedInt>2)and(self.cookedInt<=5):
self.cookedDesc="三分熟"
elif(self.cookedInt>5)and(self.cookedInt<=7):
self.cookedInt="五分熟"
elif(self.cookedInt>7)and(self.cookedInt<=9):
self.cookedInt="八分熟"
elif(self.cookedInt>9)and(self.cookedInt<=12):
self.cookedInt="熟透了"
elif self.cookedInt>12:
self.cookedInt="烤糊了"
#python中的main方法:表示下面的代碼只能執(zhí)由當前文件執(zhí)行
if __name__=="__main__":
beef=Beef()
beef.bbq(1)
beef.addSeasoning("黃油")
print(beef)
class Beef(object):
#如果創(chuàng)建對象的時候,對象的某些屬性就具備固定的值,此時不需要傳遞參數(shù)直接使用默認值即可
def __init__(self):
self.cookedDesc="生的"
self.cookedInt=0
self.seasoning=[]#調(diào)料
#定義一個天加佐料的方法
def addSeasoning(self,s):
self.seasoning.append(s)
#字符串轉(zhuǎn)換 解決輸出只顯示內(nèi)存問題
def __str__(self):
return "熟度:%s;燒烤時間:%s;佐料:%s;"%(self.cookedDesc,self.cookedInt,self.seasoning)
#定義一個燒烤的行為
def bbq(self,time):
self.cookedInt +=time
if(self.cookedInt>0)and(self.cookedInt<=2):
self.cookedDesc="一分熟"
elif(self.cookedInt>2)and(self.cookedInt<=5):
self.cookedDesc="三分熟"
elif(self.cookedInt>5)and(self.cookedInt<=7):
self.cookedInt="五分熟"
elif(self.cookedInt>7)and(self.cookedInt<=9): ------------------>>>>根據(jù)時間來判斷牛排熟度
self.cookedInt="八分熟"
elif(self.cookedInt>9)and(self.cookedInt<=12):
self.cookedInt="熟透了"
elif self.cookedInt>12:
self.cookedInt="烤糊了"
#python中的main方法:表示下面的代碼只能執(zhí)由當前文件執(zhí)行
if __name__=="__main__":
beef=Beef()
beef.bbq(1)
beef.addSeasoning("黃油")
print(beef)
beef.bbq(1)
beef.bbq(1)
print(bbf)
beef.bbq(1)#python中的main方法:表示下面的代碼只能執(zhí)由當前文件執(zhí)行
if __name__=="__main__":
beef=Beef()
beef.bbq(1)
beef.addSeasoning("黃油")
print(beef)
beef.bbq(1)
print(beef)
beef.bbq(1)
print(beef)
beef.bbq(1)
beef.addSeasoning("意面")
print(beef)
beef.bbq(1)
print(beef)
beef.bbq(1)
beef.addSeasoning("黑椒")
print(beef)
運行結(jié)果如下
