Python標準庫中內(nèi)置裝飾器@staticmethod和@classmethod
裝飾器是Python中強大而靈活的功能,用于修改或增強函數(shù)或方法的行為。裝飾器本質(zhì)上是一個函數(shù),它接受另一個函數(shù)作為參數(shù),并返回一個新的函數(shù),通常用于在不修改原始函數(shù)代碼的情況下添加額外的功能或行為。這種技術(shù)稱為元編程,它在許多Python代碼中都有廣泛的應(yīng)用。
下面是裝飾器的原理和用法:
原理:
- 函數(shù)是一等公民:在Python中,函數(shù)是一等公民,這意味著你可以將函數(shù)作為參數(shù)傳遞給其他函數(shù),也可以從函數(shù)中返回函數(shù)。
- 裝飾器函數(shù):裝飾器本身就是一個函數(shù),它接受一個函數(shù)作為輸入?yún)?shù),并返回一個新的函數(shù),通常在新函數(shù)中修改或增強原始函數(shù)的行為。
- "@" 語法糖:Python提供了一種方便的方式來應(yīng)用裝飾器,使用 "@" 符號緊跟在函數(shù)定義之前,將裝飾器應(yīng)用于函數(shù)。
# 定義一個裝飾器函數(shù)
def my_decorator(func):
def wrapper():
print("在函數(shù)調(diào)用之前執(zhí)行一些操作")
func() # 調(diào)用原始函數(shù)
print("在函數(shù)調(diào)用之后執(zhí)行一些操作")
return wrapper
# 應(yīng)用裝飾器
@my_decorator
def say_hello():
print("Hello, World!")
# 調(diào)用被裝飾的函數(shù)
say_hello()
# 在函數(shù)調(diào)用之前執(zhí)行一些操作
# Hello, World!
# 在函數(shù)調(diào)用之后執(zhí)行一些操作
# [Finished in 625ms]def log_decorator(func):
def wrapper(*args, **kwargs):
print(f"調(diào)用函數(shù) {func.__name__},參數(shù): {args}, {kwargs}")
result = func(*args, **kwargs)
print(f"函數(shù) {func.__name__} 執(zhí)行完畢,結(jié)果: {result}")
return result
return wrapper
@log_decorator
def add(a, b):
return a + b
result = add(2, 3) #裝飾器會記錄函數(shù)的調(diào)用和結(jié)果
# 調(diào)用函數(shù) add,參數(shù): (2, 3), {}
# 函數(shù) add 執(zhí)行完畢,結(jié)果: 5
# [Finished in 578ms]import time
def performance_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"函數(shù) {func.__name__} 執(zhí)行時間: {end_time - start_time} 秒")
return result
return wrapper
@performance_decorator
def slow_function():
time.sleep(2)
slow_function()
# 函數(shù) slow_function 執(zhí)行時間: 2.0054738521575928 秒@classmethod 裝飾器: # Python標準庫中包含一些有用的內(nèi)置裝飾器
@classmethod裝飾器用于定義類方法,這些方法第一個參數(shù)是類本身(通常命名為cls),可以通過類名或?qū)嵗{(diào)用。- 類方法通常用于執(zhí)行與類相關(guān)的操作,但不依賴于特定實例的狀態(tài)。
class Person:
total_people = 0
def __init__(self, name):
self.name = name
Person.total_people += 1
@classmethod
def get_total_people(cls):
return cls.total_people
p1 = Person("Alice")
p2 = Person("Bob")
total = Person.get_total_people()@staticmethod 裝飾器: #Python標準庫中包含一些有用的內(nèi)置裝飾器
@staticmethod裝飾器用于定義靜態(tài)方法,這些方法與類的實例無關(guān),可以通過類名直接調(diào)用,不需要創(chuàng)建類的實例。- 靜態(tài)方法通常用于執(zhí)行與類相關(guān)但不依賴于實例狀態(tài)的操作。
class MathUtility:
@staticmethod
def add(a, b):
return a + b
result = MathUtility.add(2, 3)這些內(nèi)置裝飾器允許你更靈活地定義類中的方法,靜態(tài)方法用于獨立于實例的操作,而類方法用于與類相關(guān)的操作。它們提供了一種方便的方式來組織和訪問與類關(guān)聯(lián)的函數(shù)。
到此這篇關(guān)于Python標準庫中內(nèi)置裝飾器@staticmethod和@classmethod的文章就介紹到這了,更多相關(guān)Python @staticmethod和@classmethod內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3 numpy中數(shù)組相乘np.dot(a,b)運算的規(guī)則說明
這篇文章主要介紹了python3 numpy中數(shù)組相乘np.dot(a,b)運算的規(guī)則說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
pycharm環(huán)境下Django項目環(huán)境的搭建全過程
本文介紹了Django環(huán)境安裝與項目搭建流程,包括創(chuàng)建項目與app、路由配置、視圖編寫及常見報錯解決方法,旨在為新手提供參考和實用經(jīng)驗2025-10-10
MacOS安裝python報錯"zsh:?command?not?found:python"的
這篇文章主要給大家介紹了關(guān)于MacOS安裝python報錯"zsh:?command?not?found:python"的解決方法,文中將解決的辦法介紹的非常詳細,需要的朋友可以參考下2023-02-02
使用Python實現(xiàn)ELT統(tǒng)計多個服務(wù)器下所有數(shù)據(jù)表信息
這篇文章主要介紹了使用Python實現(xiàn)ELT統(tǒng)計多個服務(wù)器下所有數(shù)據(jù)表信息,ETL,是英文Extract-Transform-Load的縮寫,用來描述將數(shù)據(jù)從來源端經(jīng)過抽取(extract)、轉(zhuǎn)換(transform)、加載(load)至目的端的過程,需要的朋友可以參考下2023-07-07

