一、概述:
- Python有很多内置魔法方法,一般表现为双下划线开头和结尾。例如 name、doc、new、init、call__等,这些魔法方法会让对象持有特殊行为,今天就介绍,自己平时使用比较多的__call,我称它为:实例魔法方法。
二、使用方式:
- 什么叫实例魔法方法呢?,就是它可以把类实例当做函数调用。
- 举个栗子:
class Bar:
def __call__(self, *args, **kwargs):
print('i am instance method')
b = Bar()
b()
class Bar:
def __init__(self, p1):
self.p1 = p1
def __call__(self, func):
def wrapper():
print(func.__name__)
print("p1=", self.p1)
func()
return wrapper
@Bar("foo bar")
def hello():
print("Hello")
if __name__ == "__main__":
hello()
hello
p1= foo bar
Hello
三、优点:
- 1.代码逻辑很复杂时,不适合写成一个函数内,会封装成类,调用该类对象时,我们直接使用实例作为函数引用,更方便简洁.
- 2.通过call 实现类装饰器.
参考:https://blog.csdn.net/xie_0723/article/details/79505131