1
sinux 2015-05-23 22:01:08 +08:00
为什么你的装饰器的参数不是一个function?
|
2
ibigbug 2015-05-24 00:04:51 +08:00
`def internal(write)` ---> `def internal(*args, **kwargs)`
`if write` ---> `if kwargs.get('write')` `F(write)` ---> `F(*args, **kwargs)` `a.all_answer(True) ---> `a.all_answer(write=True)` |
3
monkeylyf 2015-05-24 09:36:20 +08:00
a.all_answer(True)是在调用bounded method相当于Question.all_answer(a, True) 这就是为什么你看到了2 given 的TypeError
而你的def internal只接受一个arg(write), 你可以改成def internal(obj, write) 然后下面所有调用F的时候都写成F(obj, write) 缺点是这个decorator 只能装饰类方法 如果用在普通的function上又会有typeerror args mismatch之类的问题 也可以参考楼上的用*/** magic来 这里的缺点是你如果用的default value那么你就要去kwargs里使用dict.get操作 同时要hard code你的变量名 总的来说不建议在类里面用装饰器 能flatten就flatten |