简介
我有一个C ++应用程序,我使用SWIG来启动在python代码中定义的GetObjects
和PutObjects
方法。 GetObjects
方法打开JSON格式化文件,从那里获取对象并将它们返回给C ++应用程序。虽然PutObjects
方法从C ++应用程序获取对象,但打开JSON格式化文件进行编写并将其存储在那里。
代码很常见,使用MyJSONDecode和MyJSONEncode函数在python对象和json字典之间进行交互。
现在问题。
Swig将MyObject
C ++类转换为位于MyObject
模块中的名为abc
的python类。我使用import abc
语句在abc.MyObject()
之类的代码中进一步使用它。
abc.MyObject
是SwigPyObject
,它本身没有字典(__dict__
成员)。
所以我无法遍历MyJSONEncode函数内的MyObject.__dict__
来构建一个应该由函数返回的字典,从而创建一个JSON格式。
但MyObject具有属性,例如url或name等。如何迭代属性?
如果需要,我会为您提供代码。请告诉我。我希望,一般来说,我的问题也是可以理解的。
等待回应:)
答案 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))]