python的装饰器详解

目录

一:介绍

二:在方法中使用

三:在类中使用

四:python自带的装饰器


一:介绍

Python的装饰器是一种高阶函数,它允许你在不改变函数内部逻辑的情况下,给函数添加额外的功能。装饰器本质上是一个接受函数对象作为参数,返回一个新的函数对象的可调用对象(通常是函数或类)。下面我们详细介绍下装饰器的应用

二:在方法中使用

定义一个装饰器方法

def my_decorator(func):  
    def wrapper():  
        print("Before function call")  
        func()  
        print("After function call")  
    return wrapper  
  

在别的方法中使用装饰器
@my_decorator  
def say_hello():  
    print("Hello!")  
  
# 调用装饰后的函数  
say_hello()

三:在类中使用

定义一个装饰器方法

def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Before function call")
        result = func(*args, **kwargs)
        print("After function call")
        return result

    return wrapper

在类中使用
class MyClass:
    @my_decorator
    def my_method(self):
        print("Inside my_method")

    # 创建类的实例并调用方法


obj = MyClass()
obj.my_method()

四:python自带的装饰器

1:@property

是一个内置的装饰器,用于将一个方法转换为属性。使用@property装饰器可以将方法的调用转换为属性访问,这样可以更加方便地访问和修改对象的属性值。使用@property装饰器的方法通常被称为getter方法,因为它用于获取属性的值。你还可以使用@<attribute_name>.setter装饰器来

2:@<attribute_name>.setter

定义一个setter方法,用于设置属性的值。setter方法需要接受一个参数,用于指定要设置的属性值。

下面是一个简单的示例,演示了如何使用@property和@<attribute_name>.setter装饰器:

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, new_name):
        if not isinstance(new_name, str):
            raise ValueError("Name must be a string")
        self._name = new_name

person = Person("Alice")
print(person.name)  # 输出: Alice
person.name = "Bob"
print(person.name)  # 输出: Bob

3:@classmethod

在Python中,@classmethod是一个内置的装饰器,用于将一个方法声明为类方法。类方法是一种特殊的方法,它需要使用类本身作为第一个参数(通常命名为cls),并且可以访问类和实例的属性。

使用@classmethod装饰器可以将一个方法转换为类方法,这样该方法就可以通过类名直接调用,而不是通过类的实例调用。类方法通常用于定义与类本身相关的方法,而不是与类的实例相关的方法。

下面是一个简单的示例,演示了如何使用@classmethod装饰器:

class MyClass:
    @classmethod
    def my_classmethod(cls, arg1, arg2):
        # 这里是类方法的实现
        return arg1 + arg2
        pass

print(MyClass.my_classmethod("Hello", "World"))

4:@staticmethod

在Python中,@staticmethod是一个内置的装饰器,用于将一个方法声明为静态方法。静态方法不需要类的实例就可以调用,并且不能访问类或实例的属性。

使用@staticmethod装饰器可以将一个方法转换为静态方法,这样该方法就可以通过类名直接调用,而不需要通过类的实例调用。静态方法通常用于定义与类本身相关的方法,而不是与类的实例相关的方法。

下面是一个简单的示例,演示了如何使用@staticmethod装饰器:

class MyClass:
    @staticmethod
    def my_static_method(arg1, arg2):
        # 这里是静态方法的实现
        return arg1+arg2
        pass

MyClass.my_static_method("Hello", "World")

相关推荐

  1. python装饰作用

    2024-01-16 21:40:07       19 阅读
  2. python装饰使用

    2024-01-16 21:40:07       17 阅读
  3. python装饰简单使用

    2024-01-16 21:40:07       37 阅读
  4. python装饰,例子说明

    2024-01-16 21:40:07       9 阅读
  5. 理解Python装饰 decorator

    2024-01-16 21:40:07       11 阅读
  6. python装饰用法

    2024-01-16 21:40:07       8 阅读
  7. Python装饰

    2024-01-16 21:40:07       41 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-16 21:40:07       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-16 21:40:07       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-16 21:40:07       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-16 21:40:07       20 阅读

热门阅读

  1. 199_二叉树的右视图

    2024-01-16 21:40:07       27 阅读
  2. ThinkPHP为什么用PHP+Swoole协程模式部署运行

    2024-01-16 21:40:07       28 阅读
  3. 人大金仓逻辑备份与还原

    2024-01-16 21:40:07       37 阅读
  4. flume

    2024-01-16 21:40:07       27 阅读
  5. Apache Answer,最好的开源问答系统

    2024-01-16 21:40:07       39 阅读
  6. js--every函数

    2024-01-16 21:40:07       34 阅读