Python 教程 22 Python 物件導向的屬性和方法

Mondo 科技 更新 2024-02-01

在 Python 物件導向程式設計中,屬性和方法是類及其物件的重要組成部分。 如果說封裝、繼承和多型是物件導向程式設計的思想,那麼類的屬性和方法就是骨架,因為屬性和方法,物件導向程式設計就成了血肉之軀。

屬性是類或物件所擁有的資料,用於描述物件的特徵和狀態。 特性可以是例項屬性(特定於物件的屬性)或類屬性(屬於類本身的屬性)。 可以使用點運算子來訪問和修改屬性的值。

例項屬性是屬於物件例項的屬性。 每個物件例項都有自己的一組例項屬性,這些屬性的值可能會在物件的生存期內更改。

假設我們想定義乙個名為"car"代表汽車資訊的類具有品牌。 我們可以使用例項屬性來表示此資訊。

class car:

def __init__(self, brand):

self.brand = brand

在上面的**中,我們定義了乙個"car"類,它有乙個例項屬性:Brand。 類中的建構函式__init__我們使用 self 關鍵字來引用當前例項物件,並使用點運算子為例項屬性賦值。 現在,我們可以建立乙個"car"物件,並訪問其實例屬性:

car1 = car("toyota")

print(car1.品牌)輸出: 豐田

在上面的**中,我們建立了乙個名為"car1"之"car"物件,並已訪問其實例屬性品牌,即輸出結果"toyota"。可以注意到,每個例項物件都有自己獨立的例項屬性集,並且可以根據特定物件的需要進行不同的分配。 例如,我們可以建立另乙個"car"物件,為其品牌屬性賦予不同的價值:

car2 = car("tesla")

print(car2.品牌)輸出:特斯拉

在上面的**中,我們建立了乙個名為"car2"之"car"物件,並已訪問其實例屬性品牌,即輸出結果"tesla"。例項屬性允許我們通過例項來描述物件的特定特徵和狀態。 每個例項物件都具有相互獨立的例項屬性,並且可以隨時修改,這使得物件導向程式設計更加靈活和可擴充套件。

類特性是屬於類的特性,它是該類的所有例項共享的特性。 類屬性獨立於任何乙個例項物件,通常用於定義類的共享資料。

假設我們想定義乙個名為"car"表示汽車資訊的類具有品牌屬性和數量屬性。 我們可以使用類屬性來表示此資訊。

class car:

brand = "toyota"

count = 0

def __init__(self, model):

self.model = model

car.count += 1

在上面的**中,我們定義了乙個"car"類,它有兩個類屬性:brand 和 count。 類中的建構函式__init__,我們使用 self 關鍵字來引用當前例項物件,並使用點運算子為例項屬性模型賦值。 同時,每次我們建立乙個新的 CAR 物件時,我們都會在 count class 屬性的值上加 1 來統計 CAR 物件的數量。 現在,我們可以建立幾個"car"物件,並訪問其類屬性和例項屬性:

car1 = car("corolla")

car2 = car("r**4")

print(car.品牌)輸出: 豐田

print(car.count) 輸出: 2

print(car1.模型)輸出:花冠

print(car2.型號) 輸出: R**4

print(car1.品牌)輸出: 豐田

print(car2.品牌)輸出: 豐田

在上面的**中,我們建立了兩個"car"物件"car1"跟"car2"。我們首先使用類名來訪問類屬性 brand 和 count,輸出結果分別為"toyota"(全部。"car"物件的共享品牌屬性)和 2(已建立)"car"物件數)。然後,我們通過物件名稱訪問例項屬性模型,輸出結果分別為"corolla"跟"r**4"。可以注意到,每個物件例項都有自己獨立的例項屬性模型。 最後,我們通過物件名稱訪問類屬性品牌,輸出是兩者"toyota"。這是因為類屬性由類的所有例項共享,因此每個物件例項都可以訪問和修改類屬性。 類屬性允許我們在類級別定義和管理共享資料。 類的所有例項都可以通過類名訪問和修改類屬性,從而更容易以統一的方式共享和管理資料。

方法是在繫結到該類的類中定義的函式。 方法可以訪問和操作類的屬性,並且可以由類的例項呼叫。 方法分為例項方法、類方法和靜態方法。

例項方法是在類中定義的方法,它繫結到物件例項,該物件例項可以訪問方法內部的例項屬性,並用於操作物件例項的行為self關鍵字來引用呼叫該方法的物件的例項。 假設我們仍在將其帶到"car"例如,除了原始的例項屬性外,我們還有乙個與速度相關的屬性,並顯示當前的速度。 此方法位於例項級別,表示特定物件例項的行為,我們可以使用 instance 方法實現該行為。

class car:

def __init__(self, brand, model):

self.brand = brand

self.model = model

self.speed = 0

def accelerate(self, increment):

self.speed += increment

def decelerate(self, decrement):

if self.speed >= decrement:

self.speed -= decrement

else:self.speed = 0

def show_speed(self):

print("current speed:", self.speed, "km/h")

在上面的**中,我們定義了乙個"car"類,它有三個例項屬性:Brand、Model 和 Speed。 此外,我們還定義了三種例項方法:加速、減速和顯示速度。 在該方法中,我們使用 self 關鍵字來引用當前例項物件的屬性,並通過增加或減少 speed 屬性來加速和減速。 show speed 方法用於在終端中顯示當前汽車的速度資訊。 現在,我們可以建立乙個"car"物件,並呼叫其實例方法:

car1 = car("toyota", "corolla")

car1.accelerate(40)

car1.show speed() 輸出: 當前速度: 40 km h

car1.decelerate(20)

car1.show speed() 輸出: 當前速度: 20 km h

在上面的**中,我們建立了乙個名為"car1"之"car"物件,然後呼叫其 accelerate 和 then deelerate 方法。 然後,通過呼叫show speed方法列印出當前汽車的速度資訊。

例項方法允許我們為物件例項定義特定行為。 每個例項物件都可以呼叫乙個例項方法,每次呼叫該方法時,該方法都可以根據物件例項的特定屬性值在內部執行不同的操作。 這使我們能夠輕鬆操作和控制物件行為,從而實現更靈活和可定製的功能。 以汽車為例,我們通過示例方法實現了汽車的加速、減速、顯示速度等功能。

類方法是繫結到類本身的方法,類方法由可以訪問和修改方法內部的類屬性的裝飾器@classmethod標記。 與例項方法不同,類方法對整個類進行操作,不依賴於特定的例項物件。 下面是乙個示例,用於詳細說明類方法的概念和用法。

class car:

total_cars = 0

def __init__(self, brand, model):

self.brand = brand

self.model = model

car.total_cars += 1

classmethod

def get_total_cars(cls):

return cls.total_cars

在上面的**中,我們定義了乙個"car"類,它有兩個例項屬性:brand 和 model,以及乙個類屬性 Total cars。 此外,我們還使用 classMethod 修飾器修飾了 Get Total Cars 方法,將其定義為類方法。 在 Get Total Cars 方法中,我們通過 cls 關鍵字引用當前類物件,這使我們能夠訪問類屬性 Total Cars。 現在,我們可以建立多個"car"物件並呼叫類方法:

car1 = car("toyota", "corolla")

car2 = car("honda", "civic")

car3 = car("ford", "mustang")

print(car.獲取 total cars()) 輸出: 3

在上面的**中,我們建立了三個不同的"car"object 並獲取通過呼叫 class 方法 get total cars 建立的 Car 物件的數量。 輸出為 3,表示已建立三個 CAR 物件。 需要注意的是,類方法可以直接通過類名呼叫,不需要建立物件例項。 而且,無論類方法是由類名還是物件例項呼叫,它們都能夠訪問和操作類級屬性和方法。 類方法通常用於處理類級操作,例如計數器、對類屬性的訪問和修改。 在汽車示例中,我們使用類方法 Get Total Cars 來獲取到目前為止已建立的汽車物件的數量,因為汽車總數由整個類共享。

靜態方法在乙個類中定義,靜態方法獨立於物件例項和類中的類,用裝飾器@staticmethod標記,與例項方法和類方法不同,靜態方法不需要訪問例項屬性或類屬性,它是一種獨立於例項和類的方法。

class car:

def __init__(self, brand, model, distance, time):

self.brand = brand

self.model = model

self.distance = distance

self.time = time

staticmethod

def calculate_**erage_speed(distance, time):

return distance / time

def get_info(self):

print(f"brand: ")

print(f"model: ")

print(f"distance: km")

print(f"time: hours")

print(f"**erage speed: km/h")

car = car("toyota", "corolla", 400, 5)

car.get_info()

在上面的**中,我們定義了乙個"car"類中,建構函式接收四個引數:Make、Model、Distance Traveled 和 Time Required。 然後,我們使用靜態方法calculate_**erage_speed計算平均速度,即行進距離除以所需時間。 在get_info在該方法中,我們列印汽車的品牌、型號、行駛距離、所需時間和平均速度(通過呼叫靜態方法)。

執行上述 **,您將獲得以下輸出:

brand: toyota

model: corolla

distance: 400 km

time: 5 hours

*erage speed: 80.0 km/h

從輸出中可以看出,我們成功獲取了汽車的資訊並計算了平均速度。 通過使用靜態方法,我們封裝了計算類中平均速度的邏輯,使其更加清晰和可維護。 同時,靜態方法可以直接通過類名呼叫,而無需先建立 car 物件的例項。 需要注意的是,靜態方法可以由類中的所有例項共享,也可以由類本身直接呼叫。 靜態方法提供了一種方便的方式來執行與類相關的操作,而無需訪問例項或類屬性。

相關問題答案

    Python 教程:Python 變數的 6 種基本型別

    學習一門程式語言,你必須忽略變數的概念。Python 中的變數是用於儲存資料的資料的名稱,您可以為變數賦值,並使用該變數在程式中的其他位置引用該值。變數在程式中扮演儲存和操作資料的角色。如果你已經學習了 C C 語言,在定義變數後,你需要新增一種限制型別,例如 intage doublemoney ...

    python新手教程很簡單

    Python 新手教程。Python 是一種簡單易學 功能強大的程式語言,具有簡潔的語法和豐富的庫,使 Python 成為初學者的理想選擇。以下是一些簡單的示例,可幫助您開始 Python 程式設計。首先,我們需要安裝 python。您可以從 Python 網站 安裝最新版本的 Python。安裝完...

    Python 教程:浮點運算揭秘

    嗨,大家好,歡迎來到我的python教程專欄!今天我們要講的是Python中乙個非常有趣的話題 浮點運算。在我們的日常編碼中,我們可能會遇到一些令人煩惱的浮點運算,讓我們一起揭開這個謎團的神秘面紗吧!問題的本質 十進位與二進位 首先,讓我們了解浮點數在計算機中是如何表示的。在硬體級別,浮點數表示為基...

    Python 教程列表工具

    嗨,大家好!今天,我們將深入探討 Python 中一些強大的列表工具,讓您的程式設計之旅更加得心應手。Python教程程式設計技巧 .陣列模組 首先,我們來談談陣列模組。該模組為我們提供了乙個更緊湊 更高效的列表,特別適合儲存相似的資料。看看這個例子,我們可以儲存雙位元組無符號二進位數字陣列,而不是...

    Python 教程:十進位浮點運算

    嗨,大家好,歡迎回到我的 Python 教程專欄!今天,我們將深入探討乙個在金融應用和其他需要精確十進位表示法的領域中非常重要的主題 十進位浮點運算。在 Python 中,我們通常使用二進位浮點數進行算術運算,但在一些特殊場景下,例如財務計算,我們需要更高的精度和可控性。這就是十進位浮點運算的用武之...