函數只能面向過程,來回互相調用後順序執行, 簡單的編碼項目,還能應付的過來, 複雜的大型項目,調用多了,就會亂。 如何才能不亂呢,可嘗試下, 面向對象類的概念, 將現實世界的事物抽象成對象,將現實世界中事物的關係抽象成類, 即要秉著“萬物皆對象,一切皆可歸類”的中心思想, 去建立你的代碼模型。 一聽 ...
函數只能面向過程,來回互相調用後順序執行,
簡單的編碼項目,還能應付的過來,
複雜的大型項目,調用多了,就會亂。
如何才能不亂呢,可嘗試下, 面向對象類的概念,
將現實世界的事物抽象成對象,將現實世界中事物的關係抽象成類,
即要秉著“萬物皆對象,一切皆可歸類”的中心思想,
去建立你的代碼模型。
一聽特別暈乎,我也一樣,
我學Python的時候,寫了將近大半年的面向過程函數,
由於我也無法深入理解到面向對象類的概念,
當時就是無法將代碼寫成面向對象類的形式。
直到自己去慢慢學習面向對象類的概念,慢慢寫大型一點的軟體項目,
秉著“萬物皆對象,一切皆可歸類”的中心思想,
才恍然發現,面向對象類,真是好東西,
比函數嚴謹多了。。。。。
初級面向對象類的建模
小項目或小工具的代碼實現,模型比較簡單:
腦海裡虛擬一個空白的世界,想象下這個世界有哪類事物(一般是名詞),
比如我們常用的包括:學生類,員工類,課程類等。
比如我們本章節介紹的下載的腳本,如果要進行面向對象類的實現,
肯定是可以的, 雖然實際編碼過程中,我們可能用函數實現就足夠了,
但是秉著“萬物皆對象,一切皆可歸類”的中心思想。
可創建一個下載器類, 下載器的類初始化(新建一個對象)是接入一個url,
代表一個具備下載某個url的實例對象。
如下:
# coding=utf-8
import os
import requests
class FileDownloader(): #類名
def __init__(self, url): #類的初始化
self.url = url
def download_file(self):
s = requests.get(self.url)
file_name = self.url.split("/")[-1]
with open(file_name, "wb") as hf:
hf.write(s.content)
file_path = os.path.abspath(file_name)
print("file downloaded to %s" % file_path)
return file_path
if __name__ == '__main__':
fd_obj = FileDownloader("http://www.zipython.com/images/angel.mp3")
# FileDownloader類初始化,成fd_obj對象
fd_obj.download_file() # 一般對象才能調用方法(函數)
高級面向對象類的建模
大項目的代碼實現,模型比較複雜,
此類建模,建議還是由專業軟體比如UML等。
類代表是具備相同屬性或方法的一種事物類別,
這種類別,一般不是真實的事物,只是虛擬出來的進行歸類而已。
所以類,一般不具有屬性和方法,
但是對象就是真實的事物,不然如何叫實例化對象呢,
所以對象,是具備屬性和方法的。
以上同學有疑問?我定義類的時候,不是寫了屬性和方法嗎?
註意咯,定義類,一般用到self, self其實是一個預設的對象,
所以:一般是實例化成對象後,才具備屬性和方法(函數),
對於測試人員,一般不鼓勵使用無需實例化的靜態方法。
更多更好的原創文章,請訪問官方網站:www.zipython.com
原文鏈接:https://www.zipython.com/#/detail?id=b685d02527274d0ca155a84fcc569d3e
也可關註“武散人”微信訂閱號,隨時接受文章推送。