Python - 類方法:初學者指南

你好,未來的Python熱愛者!今天,我們將進入Python中類方法的精彩世界。如果你是編程新手,不必擔心——我將成為你的友好指南,一步步為你解釋一切。那麼,讓我們開始吧!

Python - Class Methods

什麼是類方法?

在我們開始之前,讓我們先了解類方法究竟是什麼。將一個類想象成創建對象的藍圖。類方法是特殊的函數,屬於整個類,而不僅僅是從該類創建的個別對象。它可以訪問和修改類級別的屬性,這些屬性被類的所有實例共享。

在Python中創建類方法

在Python中創建類方法主要有兩種方式。讓我們一起探索這兩種方式!

使用classmethod()函數

創建類方法的第一種方式是使用classmethod()函數。以下是它的样子:

class MyClass:
class_attribute = "我屬於這個類"

def regular_method(self):
return "我是一個普通方法"

@classmethod
def class_method(cls):
return f"我是一個類方法,我可以訪問 {cls.class_attribute}"

# 創建MyClass的一個實例
my_object = MyClass()

# 調用類方法
print(MyClass.class_method())
print(my_object.class_method())

在這個例子中,class_method是我們的類方法。注意我們是如何使用cls而不是self作為第一個參數。這個cls代表的是類本身,而不是類的實例。

使用@classmethod裝飾器

第二種方式,更常見且在這裡看起來更漂亮(至少在我看來),是使用@classmethod裝飾器。這就像在我們的方法上戴上一頂特殊的帽子,告訴Python:“嘿,這是一個類方法!”

class Pizza:
restaurant = "Mama Mia's"

@classmethod
def change_restaurant(cls, new_restaurant):
cls.restaurant = new_restaurant

# 改變餐廳名稱
Pizza.change_restaurant("Papa John's")

print(Pizza.restaurant)  # 輸出:Papa John's

在這個美味的例子中,我們有一個帶有類方法change_restaurantPizza類。這個方法可以更改整個類的restaurant屬性。美味!

在類方法中訪問類屬性

類方法的一個超能力是它們能夠訪問和修改類屬性。讓我們看看這是如何實現的:

class Student:
school = "Python High"
total_students = 0

def __init__(self, name):
self.name = name
Student.total_students += 1

@classmethod
def change_school(cls, new_school):
cls.school = new_school

@classmethod
def get_school_info(cls):
return f"歡迎來到 {cls.school}!我們有 {cls.total_students} 個學生。"

# 創建一些學生
alice = Student("Alice")
bob = Student("Bob")

print(Student.get_school_info())
# 輸出:歡迎來到 Python High!我們有 2 個學生。

Student.change_school("Codecademy Academy")
print(Student.get_school_info())
# 輸出:歡迎來到 Codecademy Academy!我們有 2 個學生。

在這裡,我們的類方法可以訪問和修改school屬性,並讀取total_students屬性。它們就像擁有訪問類的私密信息的VIP通道!

動態地向類中添加類方法

你知道我們可以在類被定義之後向其添加方法嗎?這就像在我們的類上即時賦予新的超能力!以下是怎麼做:

class Car:
def __init__(self, brand):
self.brand = brand

def honk(cls):
return f"{cls.__name__} 發出嗶嗶聲!"

# 將honk方法添加到Car類
Car.honk = classmethod(honk)

my_car = Car("Toyota")
print(my_car.honk())  # 輸出:Car 發出嗶嗶聲!

我們在類外部定義了honk,然後作為類方法添加它。現在我們的所有Car對象都可以鳴笛了!

動態刪除類方法

正如我們可以添加方法一樣,我們也可以刪除它們。這就像給我們的類剪頭髮——有時我們需要剪掉我們不再需要的方法:

class Smartphone:
@classmethod
def take_selfie(cls):
return "茄子!"

@classmethod
def make_call(cls):
return "撥號中..."

# 刪除take_selfie方法
del Smartphone.take_selfie

# 這會工作
print(Smartphone.make_call())  # 輸出:撥號中...

# 這會引發一個AttributeError
# print(Smartphone.take_selfie())

刪除方法時要小心!確保你沒有刪除以後可能需要的方法。

總結

恭喜你!你剛剛走進了Python類方法的世界。讓我們回顧一下我們學到了什麼:

概念 描述
類方法 屬於類而不是實例的方法
classmethod() 創建類方法的函數
@classmethod 創建類方法的裝飾器
cls參數 在類方法中代表類
訪問類屬性 類方法可以訪問和修改類屬性
動態添加 我們可以在類定義後添加類方法
動態刪除 我們可以從類中刪除類方法

記住,練習成就完美。嘗試創建自己的類,並且實驗類方法。在你意識到之前,你將成為Python類的大師!

編程愉快,願你的類永遠時尚!?✨

Credits: Image by storyset