類別語法

      在〈類別語法〉中尚無留言

時空背景

物件導向(Object-oriented programming:OOP)理論在1950年初, 就已在人工智慧的著作中出現. 不過實際發展卻是在16年後的1966年. 

1966年代, Ram的價格是非常的昂貴. 所以在當時會想出物件導向理論的人, 還真是他媽的神經病. OOP使用大量的記憶空間簡化程式設計並提高撰寫的效能. 這在當時就好比想用螞蟻的腦袋去記取宇宙中的所有資訊, 是一種不切實際的方法, 或者只是滿足一時好奇心的研究. 一切都是空談, 沒有商業價值, 也不可能實現.

8086/80286時期, 電腦剛起步, 舉凡程式設計, 作業系統都未成熟, 且Ram太昂貴, 所以物件導向被視為垃圾. 直到視窗的出現, 才讓世人驚覺物件導向的重要性, 甚至如果沒有物件導向, 也就沒有現在的視窗介面.

Python在設計思維上, 除了重視抽象化的新觀念外, 當然也無法攞脫物件導向的觀念. 所以這是本篇的重點.

物件導向寫法

在未將物件導向納入考慮時, 如果我們要記錄一個學生的姓名及分數, 可以採用dict的方式

s1={"name" : "Thomas", "score" :100}
print("%s : %d" % (s1["name"], s1["score"]))

但是當物件導向介入後, 程式寫法改為如下

class Student(object):
    def __init__(self, name, score):
        self.name=name
        self.score=score
    def getName(self):
        return self.name
    def getScore(self):
        return self.score
    def setName(self, name):
        self.name=name
s2=Student("Thomas", 100) print("%s : %d " % (s2.getName(), s2.getScore()))

1. 定義類別需使用class 關鍵字, 緊接類別名稱, 然後再一組 “()”. “()”裏面是繼承的類別, 若沒有繼承的類別, 則都是object.也就是說, 所有類別都是繼承object這個頂頭類別.
2. __init__(self, 參數1, 參數2, …..) 稱為建構子, 第一個參數一定是self, 固定不變, 此變數指向實例本身.  建構子只可以return None, 但建議不要寫return.
3. s2=Student(“Thomas”, 100) 產生一個Student物件, 傳入建構子的參數, 不需包含self, 解譯器會自動把此實例的記憶体位址填進去

class是一個抽象的概念, 猶如DNA或設計藍圖. 借此藍圖而產生出 s2 物件的過程, 我們稱為實例化(instance)

如果將s2印出, 則會得到如<__main__.Student object at 0x000002583DB2F048>的訊息, 後面那一大串16進位數字, 即為此物件的記憶体位址. 如果安裝的是64位元的python, 則此位址共有16個數字, 每個數字4bit, 所以總共是64bit

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *