Python面向對象編程 - 類和實例


一、preface

面向對象編程OOP:object oriented programming。
OOP把對象作爲程序的基本單元,一個對象包含了數據和操作數據的函數。Python是一門面向對象的編程語言,通過對象實現對方法的調用。

面向過程的程序設計把計算機程序視爲一系列的命令集合,即一組函數的順序執行。爲了簡化程序設計,面向過程把函數繼續切分爲子函數,即把大塊函數通過切割成小塊函數來降低系統的複雜度。
而面向對象的程序設計把計算機程序視爲一組對象的集合,而每個對象都可以接收其他對象發過來的消息,並處理這些消息,計算機程序的執行就是一系列消息在各個對象之間傳遞。

對於面嚮對象語言,重要的概念是類和實例。類是一個抽象的模板,實例是根據類模板創建出的一個對象。
在python中,所有數據類型都可以視爲對象,當然也可以自定義對象。自定義對象數據類型就是面向對象中類的概念,根據類來創建對象。
它的三大特點就是:封裝、繼承、多態。

二、類class

  • 類是一個抽象的模板,是一種數據結構。
  • 語法:
    class class_name: pass
    class class_name(object): pass
  • 說明:
    class是關鍵字,類。類名class_name通常以大寫字母開頭。
    object表示該類是從哪個類繼承而來。事實上object是所有類都會繼承的基類,一般不會顯示寫出。(我一般會習慣寫上)

比如學生,一個班級會有很多個學生,那對於學生這個集合,會有很多共同的地方,比如說學生的姓名、學號、年級、專業、成績等一系列共同的特性,那麼我們就可以把這些都抽象成一個學生Student類。如下:

class Student(object):
    pass

上面例子,我們先用pass進行演示,表示什麼都不操作。

三、實例instance

通過類可以創建Student實例,方法如下:

>>> bart = Student()        # 變量bart指向的是一個Student的實例 
>>> bart
<__main__.Student object at 0x0086F710> # 類object 實例的內存地址
>>> Student                 # 類
<class '__main__.Student'>     # 返回的是Student 類的屬性 class

對類的實例,可以進行屬性的綁定。

  • 屬性就是一個對象的數據或者函數元素。比如Student類中學生的姓名、學號等信息。
  • 通過“據點屬性標識法”來訪問。
  • python是動態語言,根據類創建的實例可以任意綁定屬性。給實例綁定屬性的方法是通過實例變量,或者通過self變量。
>>> bart.name = 'xlp'        # 動態給變量綁定屬性
>>> bart.name
'xlp'

那屬性是如何實現綁定的呢?__init__()實例方法。
當一個實例被創建後,Python會檢查是否實現了__init__()方法,如果沒有定義該方法,對實例不會施加任何特定的操作,任何需要特殊的操作,需要自己去自定義該方法。即__init()__會被自動調用,不管是默認的還是自定義的。

  • __init__(self)
  • 1、 該方法的第一個參數永遠都是selfself指向創建的實例本身;
  • 2、 通過該方法,把屬性綁定到self指向的實例上;
  • 3、 __init__()方法返回None
  • 4、 該方法中,可以設置默認參數和位置參數。創建實例時,不能傳入空的參數,必須傳入與方法匹配的參數,但self不需要傳入,默認參數根據需要進行傳入與否。

針對第三點:因爲實例對象是在自動化創建實例調用後返回的,如果定義了構造器__init__(),它不應該返回任何對象,否則就有可能發生衝突,只能返回實例。試圖返回任何非None的其他對象會報TypeError的錯誤:

clipboard.png

查看實例屬性:dir()
通過內建函數dir(class_name)可以查看類的屬性,例如:dir(Student1)。也可以訪問實例的屬性。自己嘗試打印出來看看~

屬性這一塊還有點玄幻:類屬性和實例屬性。下一小節一起來看看吧~
然後面向過程其實也不太記得了,如果有懂的小夥伴可以留言哦~ ~ ~


如果覺得文章有丟丟用處,動動小指,點個贊吧!

如果哪裏寫的有問題,或者有更好的方式,cue我一下

❤ thanks for watching, keep on updating...

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