「この型は別の C 関数の戻り値の型です。これが、この型のインスタンスを作成する唯一の方法です」 - これはかなり紛らわしいです。「AC関数はこのタイプのインスタンスを返します-それが唯一の方法などです」という意味だと思います。
ドキュメントで、型を呼び出さないように呼び出し元に明確に警告します。C 拡張機能から型をエクスポートしないでください。返されたインスタンスを内省する人についてはあまり何もできませんが、それで何ですか? 危険にさらされているのは彼らのデータ/マシン/ジョブであり、あなたのものではありません.
[更新(コメントのUIが嫌い!)]
James: "type ...ちょうど C からのみ作成された": 繰り返しになりますが、型とそのインスタンスを混同しています。型は C で静的に作成されます。C コードには型と、型のインスタンスを取得するためにユーザーが呼び出すファクトリ関数が含まれています。あなたが説明していない何らかの理由で、ユーザーが型を直接呼び出してインスタンスを取得すると、後続の instance.method() 呼び出しがクラッシュします (「オブジェクトの関数を呼び出す」とは、それがあなたの意味することだと思います。クレイジーと呼んでください。しかし、それはあなたが修正すべきバグではありませんか?
「エクスポートしない」については、「公開しない」を試してください。
C コードでは、モジュールが提供するすべての API (型と関数の両方) をリストする、次のようなものがあります。
static struct PyMethodDef public_functions[] = {
{"EvilType", (PyCFunction) py_EvilType, ......},
/* omit above line and punters can't call it directly from Python */
{"make_evil", (PyCFunction) py_make_evil, ......},
......,
};
module = Py_InitModule4("mymodule", public_functions, module_doc, ...