Python 類

Jinku Hu 2023年1月30日 2018年3月5日
  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'}
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn