Python----魔法函数__call__的用法

简介: Python----魔法函数__call__的用法

【原文链接】

1、\_\_call__魔法函数的使用

  • \_\_call__魔法函数,实现了对象可以像函数一样调用

如下:

class Student(object):
    def __init__(self,name):
        self.name=name

    def __call__(self,age,sex):
        print("age is :{age},sex is :{sex}".format(age=age,sex=sex))

s=Student("Jack")
s(20,"man")

执行结果如下:

age is :20,sex is :man

\_\_call__魔法函数的典型应用:装饰器类

如下代码:decorator(name="func_decorator")本身是一个对象,乍一看,这里好像使用了对象来装饰一个函数,这显然是不合理的,因此,这里就是使用了__call__魔法函数,即虽然decorator(name="func_decorator")是一个对象了,但是继续当函数调用,此时走到的是类中的__call__魔法函数方法中

class decorator(object):
    def __init__(self, name="hello world"):
        self.name = name

    def __call__(self, func):
        def wrapper(*args, **kwargs):
            print("before func {func}()...".format(func=func.__name__))
            print("name= {name}".format(name=self.name))
            result = func(*args, **kwargs)
            print("after func {func}()...".format(func=func.__name__))
            return result

        return wrapper

@decorator(name="func_decorator")
def func(a, b=10):
    print("in func func3()...")
    print("a={a}, b= {b}".format(a=a, b=b))

func(10,b=100)

执行结果如下:

before func func()...
name= func_decorator
in func func3()...
a=10, b= 100
after func func()...
目录
相关文章
|
2天前
|
Python
Python闭包函数和计时器
本文介绍了闭包函数的概念,它允许内部函数引用外部作用域的变量但无法修改它们。示例展示了如何使用闭包来封装函数。接着,文章讨论了如何在函数调用时添加开始和结束的打印语句,通过传递函数作为参数实现。然后,文章引入装饰器,通过闭包定义了一个`timer`装饰器,用于在函数执行前后打印消息。最后,给出了一个练习,实现了一个计算函数执行时间的装饰器,处理了带有参数的被装饰函数。
12 1
|
2天前
|
Python
【Python操作基础】——while语句用法和pass语句
【Python操作基础】——while语句用法和pass语句
|
2天前
|
Python
【Python操作基础】——if语句用法
【Python操作基础】——if语句用法
|
23小时前
|
Python
Python使用isinstance()函数
【5月更文挑战第10天】Python使用isinstance()函数
9 2
|
23小时前
|
缓存 Python
Python中的装饰器:优雅而强大的函数装饰技术
在Python编程中,装饰器是一种强大而灵活的技术,它可以使函数具有额外的功能,而不需要改变函数的核心代码。本文将深入探讨装饰器的原理、用法以及实际应用场景,帮助读者更好地理解和利用这一重要的Python编程工具。
|
2天前
|
Python
PyQt---------信号与槽函数的关系
PyQt---------信号与槽函数的关系
11 1
|
2天前
|
测试技术 开发者 Python
Python检查函数和方法的输入/输出
【5月更文挑战第5天】Python检查函数和方法的输入/输出
13 1
|
2天前
|
Python
在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存
【5月更文挑战第12天】在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存在,该函数对路径进行检查,存在则返回True,不存在则返回False。示例代码展示了如何检查'example.txt'文件是否存在并相应打印消息。此外,`os.path.isfile()`用于确认路径是否为文件,仅当是文件时返回True,否则返回False,同样配以示例说明其用法。
23 2
|
2天前
|
Python
【Python操作基础】——函数
【Python操作基础】——函数
|
2天前
|
Python
【Python操作基础】——for语句用法
【Python操作基础】——for语句用法