欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python標(biāo)準(zhǔn)庫(kù)中內(nèi)置裝飾器@staticmethod和@classmethod

 更新時(shí)間:2023年10月07日 10:09:53   作者:鐵松溜達(dá)py  
裝飾器是Python中強(qiáng)大而靈活的功能,用于修改或增強(qiáng)函數(shù)或方法的行為,本文就來(lái)介紹一下Python標(biāo)準(zhǔn)庫(kù)中內(nèi)置裝飾器@staticmethod和@classmethod,感興趣的可以了解一下

裝飾器是Python中強(qiáng)大而靈活的功能,用于修改或增強(qiáng)函數(shù)或方法的行為。裝飾器本質(zhì)上是一個(gè)函數(shù),它接受另一個(gè)函數(shù)作為參數(shù),并返回一個(gè)新的函數(shù),通常用于在不修改原始函數(shù)代碼的情況下添加額外的功能或行為。這種技術(shù)稱(chēng)為元編程,它在許多Python代碼中都有廣泛的應(yīng)用。

下面是裝飾器的原理和用法:

原理:

  • 函數(shù)是一等公民:在Python中,函數(shù)是一等公民,這意味著你可以將函數(shù)作為參數(shù)傳遞給其他函數(shù),也可以從函數(shù)中返回函數(shù)。
  • 裝飾器函數(shù):裝飾器本身就是一個(gè)函數(shù),它接受一個(gè)函數(shù)作為輸入?yún)?shù),并返回一個(gè)新的函數(shù),通常在新函數(shù)中修改或增強(qiáng)原始函數(shù)的行為。
  • "@" 語(yǔ)法糖:Python提供了一種方便的方式來(lái)應(yīng)用裝飾器,使用 "@" 符號(hào)緊跟在函數(shù)定義之前,將裝飾器應(yīng)用于函數(shù)。
# 定義一個(gè)裝飾器函數(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)  #裝飾器會(huì)記錄函數(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í)行時(shí)間: {end_time - start_time} 秒")
        return result
    return wrapper
@performance_decorator
def slow_function():
    time.sleep(2)
slow_function()
# 函數(shù) slow_function 執(zhí)行時(shí)間: 2.0054738521575928 秒

@classmethod 裝飾器: # Python標(biāo)準(zhǔn)庫(kù)中包含一些有用的內(nèi)置裝飾器

  • @classmethod 裝飾器用于定義類(lèi)方法,這些方法第一個(gè)參數(shù)是類(lèi)本身(通常命名為cls),可以通過(guò)類(lèi)名或?qū)嵗{(diào)用。
  • 類(lèi)方法通常用于執(zhí)行與類(lèi)相關(guān)的操作,但不依賴(lài)于特定實(shí)例的狀態(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標(biāo)準(zhǔn)庫(kù)中包含一些有用的內(nèi)置裝飾器

  • @staticmethod 裝飾器用于定義靜態(tài)方法,這些方法與類(lèi)的實(shí)例無(wú)關(guān),可以通過(guò)類(lèi)名直接調(diào)用,不需要?jiǎng)?chuàng)建類(lèi)的實(shí)例。
  • 靜態(tài)方法通常用于執(zhí)行與類(lèi)相關(guān)但不依賴(lài)于實(shí)例狀態(tài)的操作。
class MathUtility:
    @staticmethod
    def add(a, b):
        return a + b
result = MathUtility.add(2, 3)

這些內(nèi)置裝飾器允許你更靈活地定義類(lèi)中的方法,靜態(tài)方法用于獨(dú)立于實(shí)例的操作,而類(lèi)方法用于與類(lèi)相關(guān)的操作。它們提供了一種方便的方式來(lái)組織和訪問(wèn)與類(lèi)關(guān)聯(lián)的函數(shù)。

到此這篇關(guān)于Python標(biāo)準(zhǔn)庫(kù)中內(nèi)置裝飾器@staticmethod和@classmethod的文章就介紹到這了,更多相關(guān)Python @staticmethod和@classmethod內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論