【Python】Python中装饰器和魔法方法的区别

在Python中,装饰器(Decorators)和魔法方法(Magic Methods)是两种不同的高级特性,分别服务于不同的目的。

装饰器 (Decorators)

装饰器是一种强大的工具,它可以修改或增强函数、方法或类的行为。装饰器本质上是一个接收函数作为输入并返回新函数的可调用对象。在Python中,装饰器通常使用 @decorator_name 的语法糖形式出现在函数定义之前。装饰器使得开发者能够在不改变原有函数源代码的情况下,通过包装(wrapping)原始函数来增加额外的功能,比如日志记录、性能分析、权限校验等。
例如:

def log_decorator(func):
    def wrapper(*args, **kwargs):
        print(f"Calling function {func.__name__}")
        result = func(*args, **kwargs)
        print(f"Function {func.__name__} returned {result}")
        return result
    return wrapper

@log_decorator
def add(a, b):
    return a + b

在这个例子中,log_decorator 是一个装饰器,它会在调用 add 函数前后打印日志信息。

魔法方法 (Magic Methods / Dunder Methods)

魔法方法是在Python类中定义的一些特殊方法,它们以两个下划线开始和结束,例如 __init__, __str__, __add__, __len__ 等。这些方法在特定场景下会被Python解释器自动调用,用来实现面向对象编程中的许多核心特性,如对象初始化、字符串表示、运算符重载、迭代、上下文管理等。
例如:

  • __init__(self, ...):当创建一个类的新实例时自动调用,常用于初始化对象的状态。
  • __str__(self):定义对象转换为字符串时的行为,当使用 print() 或者 str() 函数时触发。
  • __add__(self, other):重载加法操作符,允许类实例之间进行加法运算。
class MyInt:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        return MyInt(self.value + other.value)

    def __str__(self):
        return f"MyInt({self.value})"

a = MyInt(5)
b = MyInt(3)
print(a + b)  # 自动调用 __add__ 方法
print(a)      # 自动调用 __str__ 方法

在这个例子中,MyInt 类定义了 __init__ 初始化方法、__add__ 用于支持加法操作的魔法方法和__str__用于显示字符串表示的魔法方法。

相关推荐

  1. 【Python】Python装饰魔法方法区别

    2024-03-22 14:40:08       47 阅读
  2. python魔法方法

    2024-03-22 14:40:08       61 阅读
  3. 深入理解Python闭包装饰

    2024-03-22 14:40:08       24 阅读
  4. python迭代、生成器装饰(一)

    2024-03-22 14:40:08       58 阅读
  5. 装饰模式责任链模式区别

    2024-03-22 14:40:08       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-22 14:40:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-22 14:40:08       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-22 14:40:08       82 阅读
  4. Python语言-面向对象

    2024-03-22 14:40:08       91 阅读

热门阅读

  1. harmonyos:Socket连接

    2024-03-22 14:40:08       38 阅读
  2. 计算机常见的知识点(1)

    2024-03-22 14:40:08       51 阅读
  3. 机器学习——坐标轴下降法和梯度下降法

    2024-03-22 14:40:08       43 阅读
  4. 3. C++ 常见的段错误及对策

    2024-03-22 14:40:08       38 阅读
  5. 05|输出解析:用OutputParser生成鲜花推荐列表

    2024-03-22 14:40:08       39 阅读
  6. 基于spring boot实现接口管理平台

    2024-03-22 14:40:08       41 阅读
  7. opengl polygon 三角剖分

    2024-03-22 14:40:08       49 阅读
  8. 2024 蓝桥打卡Day18

    2024-03-22 14:40:08       44 阅读
  9. 前端小白的学习之路(ES6 二)

    2024-03-22 14:40:08       37 阅读
  10. 插件电阻的工艺结构原理及选型参数总结

    2024-03-22 14:40:08       42 阅读