What is a wrapper_descriptor, and why is Foo.__init__() one in this case?

initialization, python

Solution

What you've run into is an implementation detail. This is pretty typical for classes implemented in C, as `object` is. It's not a Python method, it is a C method, and the wrapper is part of this interface.

Why is there an `__init__` in the class dict at all?

It's not in the class dict, it's in the `object` dict. `object` has an `__init__` so that when you try to call your class's base classes' `__init__` methods using `super()`, it doesn't fail.

Problem

``` import inspect class Foo(object): pass if __name__ == '__main__': print type(Foo.__init__) print inspect.getsourcelines(Foo.__init__) ``` Output: ``` <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 ``` Googling gives very little useful information about what, exactly, a wrapper_descriptor is, and why an empty class has an `__init__` method that is not a method, but rather a wrapper_descriptor. What exactly is going on here? Do all classes without `__init__` methods have one of these wrapper_descriptor things? Why is there an `__init__` in the class dict at all?

Original source