《自拍教程36》段位三 Python面向對象類

函數只能面向過程,來回互相調用後順序執行,
簡單的編碼項目,還能應付的過來,
複雜的大型項目,調用多了,就會亂。


如何才能不亂呢,可嘗試下, 面向對象類的概念,
將現實世界的事物抽象成對象,將現實世界中事物的關係抽象成類,
即要秉着“萬物皆對象,一切皆可歸類”的中心思想,
去建立你的代碼模型。


一聽特別暈乎,我也一樣,
我學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
也可關注“武散人”微信訂閱號,隨時接受文章推送。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章