脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python中装饰器和魔法方法的区别解析

Python中装饰器和魔法方法的区别解析

2024-03-25 20:21Juvember Python

在Python中,装饰器(Decorators)和魔法方法(Magic Methods)是两种不同的高级特性,分别服务于不同的目的,这篇文章主要介绍了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__用于显示字符串表示的魔法方法。

到此这篇关于Python中装饰器和魔法方法的区别的文章就介绍到这了,更多相关Python装饰器和魔法内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_42533357/article/details/136921341

延伸 · 阅读

精彩推荐
  • Python仅用50行代码实现一个Python编写的计算器的教程

    仅用50行代码实现一个Python编写的计算器的教程

    这篇文章主要介绍了仅用50行代码实现一个Python编写的计算器的教程,主要用到了PlyPlus库使得核心代码十分简单,需要的朋友可以参考下 ...

    脚本之家12532020-06-09
  • Pythonpython实现根据主机名字获得所有ip地址的方法

    python实现根据主机名字获得所有ip地址的方法

    这篇文章主要介绍了python实现根据主机名字获得所有ip地址的方法,涉及Python解析IP地址的相关技巧,需要的朋友可以参考下...

    不吃皮蛋4122020-07-17
  • Pythonpytorch实现对输入超过三通道的数据进行训练

    pytorch实现对输入超过三通道的数据进行训练

    今天小编就为大家分享一篇pytorch实现对输入超过三通道的数据进行训练,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 ...

    东城青年5692020-04-22
  • PythonPython使用正则匹配实现抓图代码分享

    Python使用正则匹配实现抓图代码分享

    本文给大家分享的是个人的第一个作品,使用Python正则匹配实现抓图代码,非常的简单实用,推荐给大家,小伙伴们可以自由扩展下。 ...

    ghoulangle3892020-05-28
  • Python详解使用scrapy进行模拟登陆三种方式

    详解使用scrapy进行模拟登陆三种方式

    这篇文章主要介绍了使用scrapy进行模拟登陆三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    master_ning10482021-09-07
  • PythonPython3基于plotly模块保存图片表格

    Python3基于plotly模块保存图片表格

    这篇文章主要介绍了Python3基于plotly模块保存图片表格,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以...

    小雨淅淅o07082020-08-04
  • Pythonpandas参数设置的实用小技巧

    pandas参数设置的实用小技巧

    这篇文章主要给大家介绍了关于pandas参数设置的实用小技巧,文中通过实例代码结束的非常详细,对大家学习或者使用pandas具有一定的参考学习价值,需要...

    费弗里2742020-08-24
  • PythonPython数据集切分实例

    Python数据集切分实例

    今天小编就为大家分享一篇Python数据集切分实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    shenhuaifeng12492021-04-27