SWIGドキュメントを読んでいる間に、これらの行にたどり着きました..
C/C++ グローバル変数は、SWIG によって完全にサポートされています。ただし、Python の割り当てが機能する方法が原因で、基になるメカニズムは予想とは多少異なります。
Python a = 3.4で次のように入力する
と、「a」は値 3.4 を含むオブジェクトの名前になります。後で
b = aと入力
すると、"a" と "b" は両方とも値 3.4 を含むオブジェクトの名前になります。したがって、3.4 を含むオブジェクトは 1 つだけであり、"a" と "b" は両方ともそれを参照する名前です。これは、変数名が値が格納されるメモリ位置を参照する C とはまったく異なります (そして代入はデータをその位置にコピーします)。このため、C の変数割り当てを Python の変数割り当てに直接マップする方法はありません。
C グローバル変数へのアクセスを提供するために、SWIG は、各 SWIG 生成モジュールに追加される「cvar」と呼ばれる特別なオブジェクトを作成します。グローバル変数は、このオブジェクトの属性としてアクセスされます。
私の質問は、上記の方法で実装する必要があることです。上記の方法で実装しましたが、オブジェクト属性もオブジェクトとして実装されます。
以下の python コード スニペットを参照してください。
a = 10
b = a
a is b
True
class sample:
pass
obj = sample()
obj.a = 10
obj.b = obj.a
obj.a is obj.b
True
上記の両方のケースで、オブジェクトの割り当ては同じように行われます