Pythonのctypesを使用してCライブラリファイルをインターフェイスし、ctypesgenを実行して、インポートできるラッパーモジュール(api.pyなど)を作成しています。C関数とマクロの多くは、二重アンダースコアで始まる名前を持っていることがあります。これは、Pythonによって「プライベート」として扱われ、クラス定義で使用されると名前マングリングを呼び出します。
たとえば、これは機能します。
import api
api.__someGetter()
しかし、これはしません
import api
class MyClass(object):
i = api.__someGetter()
AttributeError: 'module' object has no attribute '_MyClass__someGetter'
これは機能します:
i = api.__dict__['__someGetter']()
しかし、私にはあまりエレガントで読みやすいとは思えません。コードには辞書キーの呼び出しが散らばっています。
モジュールの名前マングリングを無効にするか回避するためのより良い方法はありますか?
(これがCライブラリであるという事実は、おそらく答えとは関係ありませんが、命名規則を変更できない理由を説明していることを願っています。)