开发者

Python标准库中内置装饰器@staticmethod和@classmethod

开发者 https://www.devze.com 2023-11-19 12:14 出处:网络 作者: 铁松溜达py
目录装饰器是python中强大而灵活的功www.devze.com能,用于修改或增强函数或方法的行为。装饰器本质上是一个函数,它接受另一个函数作为参数,并返回一个新的函数,通常用于在不修改原始函数代码的情况下添加额外的功
目录

    装饰器是python中强大而灵活的功www.devze.com能,用于修改或增强函数或方法的行为。装饰器本质上是一个函数,它接受另一个函数作为参数,并返回一个新的函数,通常用于在不修改原始函数代码的情况下添加额外的功能或行为。这种技术称为元编程,它在许多Python代码中都有广泛的应用。

    下面是装饰器的原理和用法:

    原理:

    • 函数是一等公民:在Python中,函数是一等公民,这意味着你可以将函数作为参数传递给其他函数,也可以从函数中返回函数。
    • 装饰器函数:装饰器本身就是一个函数,它接受一个函数作为输入参数,并返回一个新的函数,通常在新函数中修改或增强原始函数的行为。
    • "@" 语法糖:Python提供了一种方便的方式来应用装饰器,使用 "@" 符号紧跟在函数定义之前,将装饰器应用于函数。
    # 定义一个装饰器函数
    def my_decorator(func):
        def wrapper():
            print("在函数调用之前执行一些操作")
            func()  # 调用原始函数
            print("在函数调用之后执行一些操作")
        return wrapper
    # 应用装饰器
    @my_decorator
    def say_hello():
        print("Hello, World!")
    # 调用被装饰的函数
    say_hello()
    # 在函数调用之前执行一些操作
    # Hello, World!
    # 在函数调用之后执行一些操作
    # [Finished in 625ms]
    def log_decoraphptor(func):
        def wrapper(*args, **kwargs):
     www.devze.com       print(f"调用函数 {func.__name__},参数: {args}, {kwargs}")
            result = func(*args, **kwargs)
            print(f"函数 {func.__name__} 执行完毕,结果: {result}")
            return result
        return wrapper
    @log_decorator
    def add(a, b):
        return a + b
    result = add(2, 3)  #装饰器会记录函数的调用和结果
    # 调用函数 add,参数: (2, 3), {}
    # 函数 add 执行完毕,结果: 5
    # [Finished in 578ms]
    import time
    def performance_deTZvrbqwVcorator(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            result =js func(*args, **kwargs)
            end_time = time.time()
            print(f"函数 {func.__name__} 执行时间: {end_time - start_time} 秒")
            return result
        return wrapper
    @performance_decorator
    def slow_function():
        time.sleep(2)
    slow_function()
    # 函数 slow_function 执行时间: 2.0054738521575928 秒

    @classmethod 装饰器: # Python标准库中包含一些有用的内置装饰器

    • @classmethod 装饰器用于定义类方法,这些方法第一个参数是类本身(通常命名为cls),可以通过类名或实例调用。
    • 类方法通常用于执行与类相关的操作,但不依赖于特定实例的状态。
    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标准库中包含一些有用的内置装饰器

    • @staticmethod 装饰器用于定义静态方法,这些方法与类的实例无关,可以通过类名直接调用,不需要创建类的实例。
    • 静态方法通常用于执行与类相关但不依赖于实例状态的操作。
    class MathUtility:
        @staticmethod
        def add(a, b):
            return a + b
    result = MathUtility.add(2, 3)

    这些内置装饰器允许你更灵活地定义类中的方法,静态方法用于独立于实例的操作,而类方法用于与类相关的操作。它们提供了一种方便的方式来组织和访问与类关联的函数。

    到此这篇关于Python标准库中内置装饰器@staticmethod和@classmethod的文章就介绍到这了,更多相关Python @staticmethod和@classmethod内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号