Python 類

Jinku Hu 2023年1月30日
  1. 物件導向程式設計介紹
  2. Python 類和物件
  3. Python 類構造方法
  4. 刪除類的屬性
Python 類

我們將在本節中討論 Python 物件導向程式設計(OOP)的基礎知識,比如類、物件等。

Python 是一種物件導向的程式設計,換句話說,Python 中的所有的東西都是一個物件。

物件導向程式設計介紹

物件導向程式設計(OOP)的基礎包括以下術語,以後我們會經常在學習和使用中提到

  1. 資料成員
  2. 方法
  3. 物件
  4. 建構函式
  5. 方法過載
  6. 運算子過載
  7. 繼承
  8. 類例項和例項化

Python 類和物件

類可以被認為是物件的輪廓,而物件是資料成員和成員函式的集合。類包含可以使用該類的物件來訪問的資料成員(變數)和成員函式(方法)。

新建一個類

可以使用 class 關鍵字以及後面加類的名字來新建一個類。語法如下,

class NameofClass:
    # data members of the class
    # member functions of the class

舉例如下,

>>> class Waiter:
	name = "Andrew"
	def display():
		print('Waiter Class')	
>>> print(Waiter.display)
<function Waiter.display at 0x0359E270>
>>> print(Waiter.name)
Andrew

在上例中,新建了一個名叫 Waiter 的類,它包含了一個成員變數 name 以及一個成員方法 display()

新建一個類的物件例項

你可以通過下面的語句來新建一個類的物件示例,

obj = className()

舉個例子,

>>> w = Waiter()
>>> print(w.name)
Andrew
>>> w.display()
Waiter Class

你可以看到,Waiter 類的物件例項可以通過點運算子 . 來訪問類的成員(屬性)。

類屬性

除了資料成員和成員函式之外,類還有一些 Python 的內建屬性。

  1. __dict__:包含類的名稱空間的字典。
  2. __doc__:類的文件說明
  3. __name__:類的名稱
  4. __module__: 定義類的所在模組
  5. __bases__: 包含基礎類的元組

這些屬性可以通過 . 來訪問。

舉例說明一下,

>>> class Waiter:
	"This is a waiter class"
	name="Andrew"
	def display():
		print("You are in waiter class")
>>> w = Waiter()

>>> print(w.__doc__)
This is a waiter class

>>> print(w.__dict__)
{}

>>> print(w.__module__)
__main__

Python 類構造方法

Python 類可以通過 __init__() 方法來進行構造,這個內建的方法是當對應類的物件被新建時被自動呼叫的特殊方法。構造方法基本上是用來初始化類的成員資料。

>>> class Waiter:
        def __init__(self, n):
            self.name=n
            self.age=20
        def display(self):
            print(self.name)

>>> w=Waiter('Rob')
>>> w.display()
Rob

上例中,self 引數會在構造方法定義以及其他類方法中使用。你可以這樣來看待,當你呼叫 w.display() 方法時,它會被解釋為 Waiter.display(w)

刪除類的屬性

你可以通過 del 來刪除類物件例項中的屬性。

>>> w=Waiter('Rob')
>>> w.__dict__
{'name': 'Rob', 'age': 20}
>>> del w.age
>>> w.__dict__
{'name': 'Rob'}
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook