2017-06-06 4 views
0

私は、ユーザーがCでカスタム「クラス」を作成し、別のオブジェクトを介してそれらをインスタンス化することを可能にするCライブラリのPythonバインディングを書いている、のようなもの:パッケージのユーザーにクラスの拡張を依頼するのは不愉快ですが、ユーザーはインスタンス化できませんか?

my_class = create_class(init_callback, finalize_callback, ...); 
instance1 = manager_create_object(some_manager, my_class, ...); 
instance2 = manager_create_object(some_manager, my_class, ...); 

は残念ながら、C言語はオブジェクトではありません-orientedなので、このライブラリは、言語が提供するものの範囲内でこの概念を使用します。 Pythonで

は、独自のクラスを定義するためのユーザーのために、私はPythonのクラスの概念を使用したい:

class MyClass(package.BaseClass): 
    def __init__(self, ...): 
     ... 

    def _finalize(self, ...): 
     ... 


instance1 = some_manager.create_object(MyClass, ...) 
instance2 = some_manager.create_object(MyClass, ...) 

それは言っマネージャを必要とするので、私は(MyClass()と直接オブジェクトをインスタンス化することはできません上記のmanager_create_object()を参照してください)。

はそれがMyClass()と直接派生クラス(MyClass)をインスタンス化できずに(この例ではpackage.BaseClass)パッケージのクラスを拡張するために、ユーザーに依頼する/奇妙unPythonicですか?これは主にプラグインインタフェース用で、Pythonモジュールファイルで1つ以上のクラスを定義する必要があります。

答えて

0

特に必要なサポートのためのサンプルやテンプレートを提供できる場合は、ユーザー(クライアント側)が特定の機能のローカル実装を提供することは珍しいことではありません。多くのサプライヤは、すべての実装をカバーすることができないため、これを行います。

ただし、には、さまざまな例があります。を必ず入力してください。あなたは、あなたのユーザーのために簡単にしたいです。さらに、いくつかの一般的な環境で動作する実装を構成するファイルを提供することもできます。

関連する問題