class Deco:
def __init__(self,func):
self.func=func
print("__init__执行完毕。func=",self.func)
def __call__(self,*arg,**arg2):
print("开始执行__call__。")
self.func('abc')
print(self,arg,arg2)
class MyCls():
@
Deco def myFunc(self):
print('this is my work arg is %s'%self)
mycls=MyCls() #语句 1
print("mycls=MyCls()执行完毕")
deco=Deco(mycls.myFunc) #语句 2
print("deco=Deco(mycls.myFunc)执行完毕")
deco(sendarg='abcdefg') #语句 3
上面这段代码的输出如下,前面的序号是我另外加上的:
1. __init__执行完毕。func=
2. mycls=MyCls()执行完毕
3. __init__执行完毕。func= <__main__.Deco object at 0x0208A110>
4. deco=Deco(mycls.myFunc)执行完毕
5. 开始执行__call__。
6. 开始执行__call__。
7. this is my work arg is abc
8. <__main__.Deco object at 0x0208A110> ('abc',) {}
9. <__main__.Deco object at 0x0208A150> () {'sendarg': 'abcdefg'}
对于上面的输出,我有以下问题:
1、为什么语句 1 会导致序号 1 的输出?
2、语句 2 是把类 Deco 实例化的操作,语句 3 产生了序号 3 的输出,为何实例化时只执行了类 Deco 的__init__函数而不执行__call__函数呢,难道不需要调用__call__来返回一个对象么?
3、语句 3 产生了序号 5 至序号 6 的 5 条输出内容,不明白为何是这样的输出顺序,恳请大家详细指点一下?
都是些小白问题,恳请大家不吝赐教,感谢!