Python----魔法函数__call__的用法(python__call__使用场景)

网友投稿 696 2022-08-23


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_decoratorin func func3()...a=10, b= 100after func func()...


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis where 标签使用
下一篇:Python----魔法函数__call__的用法(python __call__方法)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~