2009-02-23 190 views
3

基本上我使用的是应用程序的C++ API,但没有提及它的python访问。一个变量通过ref传递,如下所示:如何在Python中通过ref传递值?

GetPoint (Point &p, Object obj) 

那么我该如何转换为Python?有没有通过ref符号?

+0

有点相关的问题与一些相关的答案:http://stackoverflow.com/questions/534375/passing-values-in-python – Dana 2009-02-23 18:03:39

+0

感谢忘了那一个。 – 2009-02-23 18:08:42

+1

我知道这是一个老问题,但对于未来的读者:当将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

回答

4

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参数。

2

我很确定Python将引用的值传递给一个变量。 This article或许可以解释得比我更好。

1

对象总是作为Python中的参考传递。所以包装在对象中产生类似的效果。

3

这可能是因为你的Python绑定已经把该签名改成:

Point GetPoint(Object obj) 

甚至:

Point Object::GetPoint() 

所以看为绑定文档或来源。

1

Python中没有符号的引用 - 正确的事情取决于您的API。问自己的问题是谁拥有从C++传递给python的对象。有时,最简单的方法就是将对象复制到python对象中,但这并不总是最好的做法。

你可能有兴趣在Boost.Python的http://www.boost.org/doc/libs/1_38_0/libs/python/doc/index.html