2011-04-21 84 views
1

介紹。 我有一個C++應用程序,我使用SWIG來啓動GetObjectsPutObjects在python代碼中定義的方法。 GetObjects方法打開JSON格式的文件,從那裏獲取對象並將它們返回給C++應用程序。雖然PutObjects方法從C++應用程序獲取對象,但打開JSON格式化文件進行寫入並將其存儲在那裏。Python代碼中的SwigPyObject和JSON通信

代碼很常見,它使用MyJSONDecode和MyJSONEncode函數在python對象和json字典之間進行交互。

現在的問題。 Swig將MyObject C++類轉換爲位於abc模塊中的稱爲MyObject的python類。我使用import abc聲明在代碼中使用它,如abc.MyObject()abc.MyObjectSwigPyObject,它沒有字典本身(__dict__成員)。

所以我不能遍歷MyObject.__dict__裏面的MyJSONEncode函數來建立一個字典,應該由該函數返回,因此創建一個JSON格式。

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

如果需要,我會爲您提供代碼。請讓我知道。總的來說,我希望我的問題能夠得到理解。

等待一種迴應:)

回答

1

您應該能夠使用「目錄」功能獲取對象的屬性列表。

這裏是例子抓住所有非功能用戶創建的屬性(稱爲「屬性」):

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