一、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、 該方法的第一個參數永遠都是
self
,self
指向創建的實例本身; - 2、 通過該方法,把屬性綁定到
self
指向的實例上; - 3、
__init__()
方法返回None
; - 4、 該方法中,可以設置默認參數和位置參數。創建實例時,不能傳入空的參數,必須傳入與方法匹配的參數,但self不需要傳入,默認參數根據需要進行傳入與否。
針對第三點:因爲實例對象是在自動化創建實例調用後返回的,如果定義了構造器__init__()
,它不應該返回任何對象,否則就有可能發生衝突,只能返回實例。試圖返回任何非None的其他對象會報TypeError
的錯誤:
查看實例屬性:dir()
通過內建函數dir(class_name)
可以查看類的屬性,例如:dir(Student1)。也可以訪問實例的屬性。自己嘗試打印出來看看~
屬性這一塊還有點玄幻:類屬性和實例屬性。下一小節一起來看看吧~
然後面向過程其實也不太記得了,如果有懂的小夥伴可以留言哦~ ~ ~
如果覺得文章有丟丟用處,動動小指,點個贊吧!
如果哪裏寫的有問題,或者有更好的方式,cue我一下
❤ thanks for watching, keep on updating...