2013-03-19 12 views
11
import inspect 

class Foo(object): 
    pass 

if __name__ == '__main__': 
    print type(Foo.__init__) 
    print inspect.getsourcelines(Foo.__init__) 

出力:wrapper_descriptorとは何ですか?この場合、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があり、なぜ空のクラスはメソッドではなく、wrapper_descriptorない__init__方法を持っているもの、についてはほとんど有用な情報を提供します。

ここでは正確に何が起こっていますか? __init__メソッドを持たないすべてのクラスには、これらのwrapper_descriptorのいずれかのものがありますか?なぜ、クラス内に__init__があるのですか?

答えて

6

実行内容は実装の詳細です。 objectはC言語で実装されているクラスではかなり一般的です。これはPythonメソッドではなく、Cメソッドであり、ラッパーはこのインターフェイスの一部です。

なぜ__init__がクラスdictにあるのですか?

object dictにあります。 objectには__init__があるため、クラスの基本クラスの__init__メソッドをsuper()を使用して呼び出すと、失敗しません。

+0

C APIドキュメントでは、これ以外の詳細についても説明しています。しかし、通常は、「スロットラッパー」、「メソッドラッパー」などは、バインドされたメソッド、バインドされていないメソッドなどのように呼び出すことができますが、Pythonを持たないソースコード。 – abarnert

関連する問題