基本上我使用的是应用程序的C++ API,但没有提及它的python访问。一个变量通过ref传递,如下所示:如何在Python中通过ref传递值?
GetPoint (Point &p, Object obj)
那么我该如何转换为Python?有没有通过ref符号?
基本上我使用的是应用程序的C++ API,但没有提及它的python访问。一个变量通过ref传递,如下所示:如何在Python中通过ref传递值?
GetPoint (Point &p, Object obj)
那么我该如何转换为Python?有没有通过ref符号?
Python中没有通过引用符号传递。
只需修改传入的点,您的修改将从调用函数中可见。
>>> def change(obj):
... obj.x = 10
...
>>> class Point(object): x,y = 0,0
...
>>> p = Point()
>>> p.x
0
>>> change(p)
>>> p.x
10
...
所以我应该通过它像:用GetPoint(P,OBJ)?
是的,虽然Iraimbilanja有一个好点。绑定可能已经改变了调用返回点而不是使用out参数。
我很确定Python将引用的值传递给一个变量。 This article或许可以解释得比我更好。
对象总是作为Python中的参考传递。所以包装在对象中产生类似的效果。
这可能是因为你的Python绑定已经把该签名改成:
Point GetPoint(Object obj)
甚至:
Point Object::GetPoint()
所以看为绑定文档或来源。
Python中没有符号的引用 - 正确的事情取决于您的API。问自己的问题是谁拥有从C++传递给python的对象。有时,最简单的方法就是将对象复制到python对象中,但这并不总是最好的做法。
你可能有兴趣在Boost.Python的http://www.boost.org/doc/libs/1_38_0/libs/python/doc/index.html
有点相关的问题与一些相关的答案:http://stackoverflow.com/questions/534375/passing-values-in-python – Dana 2009-02-23 18:03:39
感谢忘了那一个。 – 2009-02-23 18:08:42
我知道这是一个老问题,但对于未来的读者:当将Python与其他语言的API一起使用时,您应该能够直接访问成员,而不是使用getter和setter。如果Python绑定是好的,那么这些属性实际上是[properties](http://docs.python.org/library/functions.html#property),并且您将在不知道它的情况下通过访问器重定向。 Getters和setter不是pythonic,所以我在使用wxPython或从Jython使用Swing时没有使用它们。 – 2012-02-02 00:29:45