基本上我使用的是應用程序的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