首頁 >後端開發 >Python教學 >Python物件導向程式設計中類別和實例的簡單講解(附範例)

Python物件導向程式設計中類別和實例的簡單講解(附範例)

不言
不言轉載
2018-10-09 15:33:422528瀏覽

這篇文章帶給大家的內容是關於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 实例的内存地址
>>> Student                 # 类
<class>     # 返回的是Student 类的属性 class</class></__main__.student>

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

屬性就是一個物件的資料或是函數元素。例如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的錯誤:

Python物件導向程式設計中類別和實例的簡單講解(附範例)

#檢視實例屬性:dir()
透過內建函數dir (class_name)可以查看類別的屬性,例如:dir(Student1)。也可以存取實例的屬性。自己嘗試印出來看看~

#

以上是Python物件導向程式設計中類別和實例的簡單講解(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除