Python 類
我們將在本節中討論 Python 物件導向程式設計(OOP)的基礎知識,比如類、物件等。
Python 是一種物件導向的程式設計,換句話說,Python 中的所有的東西都是一個物件。
物件導向程式設計介紹
物件導向程式設計(OOP)的基礎包括以下術語,以後我們會經常在學習和使用中提到
- 類
- 資料成員
- 方法
- 物件
- 建構函式
- 方法過載
- 運算子過載
- 繼承
- 類例項和例項化
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 的內建屬性。
__dict__
:包含類的名稱空間的字典。__doc__
:類的文件說明__name__
:類的名稱__module__
: 定義類的所在模組__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'}
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