python語法基礎之物件導向練習

2021-09-03 02:50:48 字數 4546 閱讀 2201

# 定義車類

class car(object):

# 定義車的方法

def move(self):

print("---車在移動---")

def stop(self):

print("---停車---")

# 定義乙個銷售車的店類

class carstore(object):

def order(self):

self.car = car() #找一輛車

self.car.move()

self.car.stop()

上面的4s店,只能銷售那一種型別的車

如果這個是個銷售北京現代品牌的車,比如伊蘭特、索納塔等,該怎樣做呢?

# 定義伊蘭特車類

class yilantecar(object):

# 定義車的方法

def move(self):

print("---車在移動---")

def stop(self):

print("---停車---")

# 定義索納塔車類

class suonatacar(object):

# 定義車的方法

def move(self):

print("---車在移動---")

def stop(self):

print("---停車---")

# 定義乙個銷售北京現代車的店類

class carstore(object):

def order(self, typename):

#根據客戶的不同要求,生成不同的型別的車

if typename == "伊蘭特":

car = yilantecar()

elif typename == "索納塔":

car = suonatacar()

return car

這樣做,不太好,因為當北京現代又生產一種新型別的車時,又得在carstore類中修改,有沒有好的解決辦法呢?

# 定義伊蘭特車類

class yilantecar(object):

# 定義車的方法

def move(self):

print("---車在移動---")

def stop(self):

print("---停車---")

# 定義索納塔車類

class suonatacar(object):

# 定義車的方法

def move(self):

print("---車在移動---")

def stop(self):

print("---停車---")

# 用來生成具體的物件

def createcar(typename):

if typename == "伊蘭特":

car = yilantecar()

elif typename == "索納塔":

car = suonatacar()

return car

# 定義乙個銷售北京現代車的店類

class carstore(object):

def order(self, typename):

# 讓工廠根據型別,生產一輛汽車

car = createcar(typename)

return car

car1=carstore()

car=car1.order("伊蘭特")

car.stop()

car.move()

d:\anaconda\python.exe e:/pythonwork/黑馬/設計汽車.py

---停車---

---車在移動---

process finished with exit code 0

# 定義伊蘭特車類

class yilantecar(object):

# 定義車的方法

def move(self):

print("---1---")

def stop(self):

print("---停車---")

# 定義索納塔車類

class suonatacar(object):

# 定義車的方法

def move(self):

print("---車在移動---")

def stop(self):

print("---停車---")

# 定義乙個生產汽車的工廠,讓其根據具體的訂單生產車

class ca***ctory(object):

def createcar(self, typename):

if typename == "伊蘭特":

car = yilantecar()

elif typename == "索納塔":

car = suonatacar()

return car

# 定義乙個銷售北京現代車的店類

class carstore(object):

def __init__(self):

# 設定4s店的指定生產汽車的工廠

self.ca***ctory = ca***ctory()

def order(self, typename):

# 讓工廠根據型別,生產一輛汽車

car = self.ca***ctory.createcar(typename)

return car

car=carstore()

car1=car.order("伊蘭特")

car1.move()

咋一看來,好像只是把生產環節重新建立了乙個類,這確實比較像是一種程式設計習慣,此種解決方式被稱作簡單工廠模式

工廠函式、工廠類對具體的生成環節進行了封裝,這樣有利於**的後需擴充套件,即把功能劃分的更具體,4s店只負責銷售,汽車廠只負責製造

當買車時,有很多種品牌可以選擇,比如北京現代、別克、凱迪拉克、特斯拉等,那麼此時該怎樣進行設計呢?

# 定義乙個基本的4s店類

class carstore(object):

#僅僅是定義了有這個方法,並沒有實現,具體功能,這個需要在子類中實現

def createcar(self, typename):

pass

def order(self, typename):

# 讓工廠根據型別,生產一輛汽車

self.car = self.createcar(typename)

self.car.move()

self.car.stop()

# 定義乙個北京現代4s店類

class xiandaicarstore(carstore):

def createcar(self, typename):

self.ca***ctory = ca***ctory()

return self.ca***ctory.createcar(typename)

# 定義伊蘭特車類

class yilantecar(object):

# 定義車的方法

def move(self):

print("---車在移動---")

def stop(self):

print("---停車---")

# 定義索納塔車類

class suonatacar(object):

# 定義車的方法

def move(self):

print("---車在移動---")

def stop(self):

print("---停車---")

# 定義乙個生產汽車的工廠,讓其根據具體得訂單生產車

class ca***ctory(object):

def createcar(self,typename):

self.typename = typename

if self.typename == "伊蘭特":

self.car = yilantecar()

elif self.typename == "索納塔":

self.car = suonatacar()

return self.car

suonata = xiandaicarstore()

suonata.order("索納塔")

定義了乙個建立物件的介面(可以理解為函式),但由子類決定要例項化的類是哪乙個,工廠方法模式讓類的例項化推遲到子類,抽象的carstore提供了乙個建立物件的方法createcar,也叫作工廠方法

子類真正實現這個createcar方法建立出具體產品。 建立者類不需要直到實際建立的產品是哪乙個,選擇了使用了哪個子類,自然也就決定了實際建立的產品是什麼。

Python之物件導向 物件導向基礎

一 面向過程 物件導向對比 1 面向過程 根據業務邏輯從上到下寫壘 2 函式式思想 將某功能 封裝到函式中,日後便無需重複編寫,僅呼叫函式即可 3 物件導向 對函式進行分類和封裝 1 2 3一步一步抽象,函式式是走向物件導向的中間步驟 函式式的應用場景 各個函式之間是獨立且無共用的資料 物件導向程式...

Python 基礎之物件導向

封裝繼承 類和型別 多型意味著就算不知道變數所引用的物件型別是什麼,還是能對它進行操作,而它也會根據物件 或者類 型別的不同而表現出不同的行為。程式得到了乙個物件,但是並不知道它是怎麼實現的 它可能有多種 形狀 繫結到物件特性上面的函式稱為方法 method 對於乙個變數x來說,我們不需要知道他是字...

Python 基礎之物件導向

python 是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言。python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。python 是一種解釋型語言 這意味著開發過程中沒有了編譯這個環節。類似於php和perl...