当我阅读 SWIG 文档时,我通过了这些线路..
SWIG 完全支持 C/C++ 全局变量。但是,由于 Python 赋值的工作方式,底层机制与您可能预期的有所不同。当您在 Python 中键入以下内容时,
a = 3.4
“a”将成为包含值 3.4 的对象的名称。如果您稍后键入
b = a,
则“a”和“b”都是包含值 3.4 的对象的名称。因此,只有一个对象包含 3.4,并且“a”和“b”都是引用它的名称。这与 C 完全不同,其中变量名称指的是存储值的内存位置(并且赋值将数据复制到该位置)。因此,没有直接的方法将 C 中的变量赋值映射到 Python 中的变量赋值。
为了提供对 C 全局变量的访问,SWIG 创建了一个名为“cvar”的特殊对象,该对象被添加到每个 SWIG 生成的模块中。然后将全局变量作为该对象的属性进行访问。
我的问题是以上述方式实施的需要是什么。即使我们以上述方式实现对象属性也实现为对象。
请看下面的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
在上述两种情况下,对象分配都以相同的方式发生