2011-07-24 16 views
2

私はZopeインターフェースの仕組みを理解しようとしました。私はInterfaceがInterfaceClassの単なる普通のクラスであることを知っています。しかし、Interfaceが単なるクラスインスタンスである場合、それが継承される基本クラスとして使用できる理由は何ですか?Zopeインターフェイスはどのように実装されていますか?

クラスIFoo(インターフェイス): を渡す

いくつかの洞察を教えてください。ありがとうございました。

答えて

3

Pythonは、本質的に柔軟性があり、かつどのオブジェクトがあればは、基本クラスのようなに見えるように、ベースクラスすることができます。 Pythonの場合と同様に、Pythonクラスで見つかると予想される属性を実装することを意味します。

Interfaceクラス(またはその基本仕様と要素)はいくつかを設定します。理解を得るために、二重下線(__)で始まる設定された変数を探し:

  • __module__:Pythonパス・モジュールを含むストリング。

  • __name__:クラスが定義された名前。

  • __bases__:このクラスの基本クラス。

  • __doc__ :(オプション)クラスのドキュメントストリング。

さらに、InterfaceClass __init__メソッドは、基本クラスとして使用されたときに呼び出されます。 Pythonは基本的に基本クラスをメタクラスとして扱い、クラス定義で使用するたびに基本クラスの新しいインスタンス(メタクラス)が作成されます。これは、__init__メソッドが新しい__name____bases__の値と、すべての新しいクラス属性をキーワード引数(__module__とオプションの__doc__を含む)として渡すことを意味します。

これは、すべての(特別な属性の「クラス」の段落を探してください)Standard type hierarchy section of the Python Data Model documentに記載されており、the same document, in the Customizing class creation sectionに(__class__属性を持つ基底クラスは、タイプとみなされます)。

したがって、少なくとも__module____name____bases__属性を定義任意 Pythonのインスタンス、および適切な__init__方法は、他のクラスの基本クラスとして動作します。残りはPythonが行います。 Zopeのインタフェースの実装で

+0

、コードのこのような行がある: インタフェース= InterfaceClass( "インターフェース"、__module__は= 'zope.interface') InterfaceClassが通常クラスです。 – Zidadi

+0

@Zidadiあなたはかなり正しいです、私の答えは間違っています、私はあなたに正解を得るのを見るでしょう。 –

+0

@Zidadi InterfaceClassがどのようにメタクラスであるかを説明するために更新されました。 –

関連する問題