當前位置:
首頁 > 最新 > 簡單定義Python和Scala的類和對象

簡單定義Python和Scala的類和對象

在現代編程語言里,類和對象都是繞不過的話題。對象這個概念可以是生活的抽象,為了更好的理解使用書來做比喻,每一本書都是一個對象,也就是一個實例,書本身具有的頁碼等等固定不變的東西,就是屬於書的性質(屬性),而我們對書有著一系列的操作,比如打開書,合上書,在編程語言里稱為方法。我們把各種各樣的書都可以抽象為一種類型,也就是類。先有類,再有實例,類是對象的藍本。

我們以書籍為例,先看看如何構建一個類:

Scala:

Python:

Scala的類使用了{}將整個類的定義包含起來,而Python的類通過縮進符來包含整個類的定義。Scala的Python選取類名的規則都是一樣的,採用駝峰式命名,單詞的首字母大寫。Python的類都繼承自object,而Scala的類就是一個純粹的類。在Scala使用new Book來創建一個實例,而Python使用Book()來實例(實際上是__new__的語法糖)。我們可以在類的定義了加上一些好玩的東西,比如屬性和實例。

說明一下:為了方便,Scala使用idea作為編輯器,構建一個Test的單例對象運行程序(後面會聊到的,先跳過)。Python使用Spyder作為編輯器,使用if __name__ == "main":去模擬main方法。因為只是為了講解概念,會略去很多工程上的細節。

初始化:

書一般都會有書名,假設書名可以區分書的唯一性,在創建實例時必須要給這個實例一個書名,那麼如何給Book這個類添加書名這個屬性:

Scala:

Python:

在Scala的Book類後面的圓括弧里跟著一個標識符name(稱為類參數),使用這種方法構造的類,要求使用者在剛開始創建這個實例時就必須要提供相應的數據,我們在Book這個類裡面加上了println方法,在創建book這個實例時,就會列印出來name這個參數。Python在實例的初始化,使用__init__的內置方法,self是Python的一個習慣命名,因為Python在類方法上都會在第一個參數傳入這個類的實例,我們把傳入的name賦值給self.name(實例屬性),再print出來。

屬性

我們去看一本書,可能會首先大概的翻一翻去獲得這個本書的頁數pages這個屬性。

Scala:

Python:

Scala和Python定義了一個類屬性pages,並且在實例化後通過book.pages = 100進行賦值,表示這本叫做Hello World!的書有一百頁。值得注意的是Scala我們使用了var變數,而不是val變數,這樣就可以在後續代碼里對其重新賦與不同的值。

私有屬性

假設這本書你已經寫上屬於你的獨有筆記,不希望別人看到,那麼我們可以定義私有屬性來防止別人的偷窺。

Scala:

Python:

這時候Scala會報如下錯誤:

Python會告訴你:

Scala通過在變數前面加上private來防止實例化後,有人偷看筆記,而Python則是在notes前面加一個下劃線表示這個屬性不公開(當然這不是絕對意義上的不公開,要是你知道私有屬性存在,無論是Scala還是Python都會有辦法看到私有屬性)。

方法

當然筆記不會是無緣無故存在的,我們需要給這本書寫上筆記,這個時候我們就需要使用方法,也就是某種操作修改或者寫入筆記。

Scala:

Python:

Scala里我們寫下了writeNotes方法,它接受外部傳過來的參數note,並且將"very good!"重新賦值給notes,而Python則使用write_notes將"very good!"賦值給_notes變數。這裡就體現了Scala和Python對於方法命名的小小區別,Scala使用了首字母小寫,其餘單詞開頭都是大寫,而Python的分隔符使用_。(這裡應該要有返回值,表示確實寫入成功,為了簡便省略了。)

剩下的是獨屬於Scala的內容了,講講單例對象。Scala的類定義裡面是不允許存在靜態方法的,所以Scala提供了object這種的單例對象,單例對象和類的定義很像,但是單例對象不需要實例化,單例對象本身就是一等的對象,單例對象的名稱可以理解為附加在對象的上的名稱。如果在同一源碼中單例對象和某個類共用名字,那麼這個單例對象稱為這個類的伴生對象。類和它的伴生對象可以互相訪問私有成員。沒有同名的類的單例對象稱為獨立對象,也就是上文中的test這個對象,使用main方法承載,作為程序的入口。(此代碼僅僅只是示例,平時不要這麼玩)


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

資深程序員:給Python軟體開發測試的25個忠告!
R開發人員使用Python

TAG:Python |