2017-07-04 15 views
0

私は希望の動作(インターフェイス)を定義する関数のグループを持っています。モジュールのためのインターフェイスを実装するためのpythonic方法

このグループはクラスでラップすることができるので、私が望む(実装されていないエラーを発生させる)必要な動作を "強制"することができます。

しかし、それは非常にpythonicではなく、クラスは静的メソッドの束を持つ単なるクラスに過ぎません。

私は機能を持つモジュールを使用しているので、モジュールですべての機能を実装することはできません。

クラス内でラップすることなく、すべての機能を実装するためのモジュールの実装方法を教えてください。

ありがとうございます!

+0

なぜ何かを強制する必要がありますか?他の人にAPIの実装を依頼していますか? –

+0

ファクトリの一部としてそれを使用したいので、アプリケーションは単にオブジェクトを動的に取得し、異なる実装に同じ関数名を使用することができます – NI6

+0

なぜ何を強制する必要がありますか? –

答えて

0

解決策の1つは、実装に「登録する」メソッドと特定の実装を「取得する」メソッドを持つことです。有効な実装は、必要なメソッド名を持つオブジェクトです。

class MyFactory: 
    def register(self, name, implementation): 
     # check implementation somehow and raise an Exception if it's not valid 
     # insure implementation has all required function names and they are callable 

    def get_implementation(self, name): 
     # returns a previously registered implementation 

あなたが本当にここで達成唯一のことは、あなたがそれを登録するときに無効な実装ではなく、あなたがそれを使用するときに例外をスローすると、例外がスローされることです。このようなことが価値あるものであるかどうかは疑問です。あなたがそれを使うときに実装がうまく動作しない方法が無限にあり、登録は最も明白なもの(関数名が欠けている)しか捕捉できません。

関連する問題