python代码中的SwigPyObject和JSON通信

时间:2011-04-21 06:53:05

标签: c++ python json swig

简介 我有一个C ++应用程序,我使用SWIG来启动在python代码中定义的GetObjectsPutObjects方法。 GetObjects方法打开JSON格式化文件,从那里获取对象并将它们返回给C ++应用程序。虽然PutObjects方法从C ++应用程序获取对象,但打开JSON格式化文件进行编写并将其存储在那里。

代码很常见,使用MyJSONDecode和MyJSONEncode函数在python对象和json字典之间进行交互。

现在问题。 Swig将MyObject C ++类转换为位于MyObject模块中的名为abc的python类。我使用import abc语句在abc.MyObject()之类的代码中进一步使用它。 abc.MyObjectSwigPyObject,它本身没有字典(__dict__成员)。

所以我无法遍历MyJSONEncode函数内的MyObject.__dict__来构建一个应该由函数返回的字典,从而创建一个JSON格式。

但MyObject具有属性,例如url或name等。如何迭代属性?

如果需要,我会为您提供代码。请告诉我。我希望,一般来说,我的问题也是可以理解的。

等待回应:)

1 个答案:

答案 0 :(得分:1)

您应该能够使用“dir”函数来获取对象的属性列表。

这是抓取所有非功能用户创建的属性(称为“属性”)的示例:

import inspect

class MyObject(object):
    def __init__(self):
        self.b = 1
        self.c = 'a'
    def func(self):
        pass

obj = MyObject()
# Get all the user created attributes for the object
attributes = [d for d in dir(obj)
              if not d.startswith('__')]
# Filter those to get the non functions
properties = [a for a in attributes
              if not inspect.ismethod(getattr(obj,a))]