私は、ユーザーが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つ以上のクラスを定義する必要があります。