14
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

__init__グーグルは、wrapper_descriptorが正確に何であるか、そして空のクラスがメソッドではなく、wrapper_descriptorであるメソッドを持っている理由についての有用な情報をほとんど提供しません。

ここで何が起こっているのですか?メソッドのないすべてのクラスに__init__は、これらのwrapper_descriptorのいずれかがありますか?なぜ__init__クラスの口述があるのですか?

4

1 に答える 1

10

あなたが遭遇したのは、実装の詳細です。これは、Cで実装されたクラスでは非常に一般的objectです。これはPythonメソッドではなく、Cメソッドであり、ラッパーはこのインターフェイスの一部です。

なぜ__init__クラスの口述があるのですか?

それはクラスの口述ではなく、口述の中にありobjectます。objectを使用してクラスの基本クラスのメソッドを__init__呼び出そうとしても、失敗しないようになっています。__init__super()

于 2013-03-19T23:25:27.880 に答える