import inspect
class Foo(object):
pass
if __name__ == '__main__':
print type(Foo.__init__)
print inspect.getsourcelines(Foo.__init__)
输出:
<type 'wrapper_descriptor'>
Traceback (most recent call last):
*snip*
File "/usr/lib/python2.7/inspect.py", line 420, in getfile
'function, traceback, frame, or code object'.format(object))
TypeError: <slot wrapper '__init__' of 'object' objects> is not a module, class, method, function, traceback, frame, or code object
谷歌搜索几乎没有提供关于wrapper_descriptor究竟是什么的有用信息,以及为什么空类有一个__init__
方法不是方法,而是一个wrapper_descriptor。
这到底发生了什么?没有__init__
方法的所有类都有这些wrapper_descriptor之一吗?为什么类dict中有__init__
?
答案 0 :(得分:8)
您遇到的是实施细节。这对于在C中实现的类非常典型,因为object
是。它不是Python方法,它是一个C方法,包装器是这个接口的一部分。
为什么类dict中有
__init__
?
这不在课堂词典中,而是在object
词典中。 object
有一个__init__
,因此当您尝试使用__init__
调用类的基类'super()
方法时,它不会失败。