python 代码中的 SwigPyObject 和 JSON 通信
简介。 我有一个 C++ 应用程序,我使用 SWIG 来启动在 python 代码中定义的 GetObjects
和 PutObjects
方法。 GetObjects
方法打开 JSON 格式的文件,从那里获取对象并将它们返回到 C++ 应用程序。当 PutObjects
方法从 C++ 应用程序获取对象时,打开 JSON 格式的文件进行写入并将它们存储在那里。
该代码非常常见,使用 MyJSONDecode 和 MyJSONEncode 函数在 python 对象和 json 字典之间进行交互。
现在问题来了。 Swig 将 MyObject
C++ 类转换为位于 abc
模块中名为 MyObject
的 Python 类。我使用 import abc
语句在 abc.MyObject()
等代码中进一步使用它。 abc.MyObject
是一个 SwigPyObject
并且它本身没有字典(__dict__
成员)。
因此,我无法在 MyJSONEncode 函数内迭代 MyObject.__dict__
来构建应该由函数返回的字典,从而创建 JSON 格式。
但 MyObject 有属性,例如 url 或名称等。如何迭代属性?
如果需要的话我会给你代码。请告诉我。我也希望,总的来说,我的问题得到理解。
等待友好的回复:)
Intro.
I have a C++ application, I use SWIG to launch GetObjects
and PutObjects
methods which are defined in python code. GetObjects
method opens JSON formated file, takes objects from there and returns back them to C++ application. While the PutObjects
method gets objects from C++ application, opens JSON formated file for writing and stores them over there.
The code is pretty common and uses MyJSONDecode and MyJSONEncode functions to interact between python objects and json dictionaries.
Now the problem.
Swig converts MyObject
C++ class into python class called MyObject
located in abc
module. I use import abc
statement to use it further in code like abc.MyObject()
.abc.MyObject
is a SwigPyObject
and it does not have dictionary itself (__dict__
member).
So I can't iterate through MyObject.__dict__
inside MyJSONEncode function to build up a dictionary which should be returned by the function and therefore to create a JSON format.
But MyObject has properties, for example url or name and so on. How can I iterate through properties ?
If needed, I will provide you with code. Just let me know. Also I hope, in general, my problem is understood.
Waiting for kind response :)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该能够使用“dir”函数来获取对象的属性列表。
这是获取所有非功能用户创建的属性(称为“属性”)的示例:
You should be able to use the "dir" function to get a list of attributes of an object.
Here is example which grabs all non function user created attributes (called "properties"):