elh*_*efe 13 python initialization
import inspect
class Foo(object):
pass
if __name__ == '__main__':
print type(Foo.__init__)
print inspect.getsourcelines(Foo.__init__)
Run Code Online (Sandbox Code Playgroud)
输出:
<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
Run Code Online (Sandbox Code Playgroud)
谷歌搜索几乎没有提供有关什么,确切地说,wrapper_descriptor是什么,以及为什么空类有一个__init__方法不是一个方法,而是一个wrapper_descriptor.
到底发生了什么?没有__init__方法的所有类都有这些wrapper_descriptor之一吗?为什么__init__课堂上有一个词典呢?
你遇到的是一个实现细节.对于在C中实现的类,这是非常典型的object.它不是Python方法,它是一个C方法,包装器是这个接口的一部分.
为什么
__init__课堂上有一个词典呢?
它不在课堂上,而是在object词典中.object有一个,__init__所以当你尝试使用时调用你的类的基类的__init__方法时super(),它不会失败.