Python代码中SwigPyObject与JSON的通信

1 投票
1 回答
1637 浏览
提问于 2025-04-16 16:09

简介。 我有一个用C++写的应用程序,我使用SWIG来调用在Python代码中定义的GetObjectsPutObjects方法。GetObjects方法会打开一个格式为JSON的文件,从中获取对象,然后把这些对象返回给C++应用程序。而PutObjects方法则是从C++应用程序获取对象,打开一个JSON格式的文件进行写入,并把对象存储到那里。

这段代码很常见,使用了MyJSONDecodeMyJSONEncode函数来处理Python对象和JSON字典之间的交互。

现在的问题。 SWIG把C++中的MyObject类转换成了一个Python类,也叫MyObject,它位于abc模块中。我使用import abc语句来在代码中使用它,比如abc.MyObject()abc.MyObject是一个SwigPyObject,它本身没有字典(__dict__成员)。

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

但是MyObject有一些属性,比如url或name等等。我该如何遍历这些属性呢?

如果需要,我可以提供代码。请告诉我。另外,我希望大家能理解我的问题。

期待友好的回复 :)

1 个回答

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))]

撰写回答