Python - 類方法:初學者指南
你好,未來的Python熱愛者!今天,我們將進入Python中類方法的精彩世界。如果你是編程新手,不必擔心——我將成為你的友好指南,一步步為你解釋一切。那麼,讓我們開始吧!
什麼是類方法?
在我們開始之前,讓我們先了解類方法究竟是什麼。將一個類想象成創建對象的藍圖。類方法是特殊的函數,屬於整個類,而不僅僅是從該類創建的個別對象。它可以訪問和修改類級別的屬性,這些屬性被類的所有實例共享。
在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_restaurant
的Pizza
類。這個方法可以更改整個類的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 個學生。
在這裡,我們的類方法可以訪問和修改schoo
l屬性,並讀取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