Python代码中SwigPyObject与JSON的通信
简介。
我有一个用C++写的应用程序,我使用SWIG来调用在Python代码中定义的GetObjects
和PutObjects
方法。GetObjects
方法会打开一个格式为JSON的文件,从中获取对象,然后把这些对象返回给C++应用程序。而PutObjects
方法则是从C++应用程序获取对象,打开一个JSON格式的文件进行写入,并把对象存储到那里。
这段代码很常见,使用了MyJSONDecode
和MyJSONEncode
函数来处理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))]