作者NTUHensen (摇滚人)
看板Python
标题[问题] 物件导向回传问题
时间Thu Feb 19 12:03:13 2015
def F(func):
class C(object):
....
....
return C
class BeDeco:
....
....
BeDeco = F(BeDeco)
问: 在F()内回传的C 究竟是 class 还是一个object?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.39.247.20
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1424318595.A.5B7.html
1F:→ uranusjr: TypeError: F() takes no arguments (1 given) 02/19 12:17
简写而已 重点不在那边...
※ 编辑: NTUHensen (114.39.247.20), 02/19/2015 12:34:19
2F:推 LiloHuang: 会是一个 type object 02/19 12:59
是的 我也如此想, 我也希望他是个object就好解了. 但事实上是
我们回顾一下__call__的功用时, 他的目的就是在call一个instance加入参数时,会
执行__call__里面的内容.
参:
http://0rz.tw/69tMQ
回过头来, 如果说F()回传的是object(也就是instance)的话, 那麽按照这行:
BeDeco = F(BeDeco) 的左手边BeDeco也会是object
如果我们call他的话:
result = BeDeco()看等式右手边, 理论上它会去找C内__call__ 如果没有, 程式
会显示错误. 但事实上C内没有__call__ 却执行相当正常. 这意味着它很可能不
是instance
※ 编辑: NTUHensen (114.39.247.20), 02/19/2015 13:52:31
※ 编辑: NTUHensen (114.39.247.20), 02/19/2015 13:53:46
3F:→ uranusjr: 你没看懂二楼, 它是「type object」, 重点是 type 02/19 14:07
4F:→ uranusjr: 事实上你执行完之後 BeDeco 就是 inner class C 02/19 14:07
5F:→ uranusjr: 我想你的问题可能是没有想通 class 和 class *instance* 02/19 14:09
6F:→ uranusjr: 都是 object instance (前者是 of type "type") 02/19 14:10
8F:→ uranusjr: 三千多 upvotes 的答案 02/19 14:11
感谢资讯, 看来回传的是Class object, 基本上就是class 而不是instance
※ 编辑: NTUHensen (114.39.247.20), 02/19/2015 15:06:18