2010-04-10 67 views
4

的所有屬性提供類如的Python:有沒有辦法來reflectivly列表類

class MyClass: 
    text = "hello" 
    number = 123 

是否有蟒蛇的方式來檢查MyClass的一個決定了其具有兩個屬性textnumber。我不能使用類似inspect.getSource(object)的東西,因爲我使用SWIG生成的類是我的屬性,因此它們隱藏在.so :)中。

所以我真的找對Java的[Class.getDeclardFields][1]

任何幫助的東西equivalant,將不勝感激,否則我就必須解決這個問題,痛飲+ JAVA而不是痛飲+ Python的。

+0

由於沒有 「申報」 領域,沒什麼好說的,很喜歡Java的'getDeclardFields'。如果你能解釋爲什麼你認爲你需要知道這些屬性,這可能有助於回答這個問題。 – 2010-04-10 11:43:17

+0

這個問題已被回答,但基本上我有一個C模塊的大集合,解析二進制文件並將它們讀入結構中。我希望能夠以一種很好的通用方式反射打印每個結構的內容,而不必爲每個模塊更新新代碼(因爲它們經常變化)(新字段,更改大小等),並且我們會更頻繁地添加。使用SWIG,我可以自動生成所需的.i文件並使用python,我可以通用地處理任何結構的顯示。 – hhafez 2010-04-11 01:16:17

+0

請不要將重要信息放在註釋中。請更新您的問題以包含所有信息。然後刪除評論。一旦我們看到你真正的問題是什麼,我們可能會提供幫助。 – 2010-04-12 13:29:40

回答

7

我通常只使用dir(MyClass)。也適用於實例化對象。

編輯: 我應該提到這是一個簡短的函數,我用它來計算出我的對象是否正確創建。如果您以編程方式執行此操作,您可能需要更仔細地查看反射API。

此外,它可能無法在鏈接的庫上工作。

+0

我實際上只需要鏈接庫 – hhafez 2010-04-10 04:43:24

+0

看起來ctypes並不完全支持C++。不知道這對你是否有問題,但這裏有另一個好主意。 http://stackoverflow.com/questions/135834/python-swig-vs-ctypes – 2010-04-10 21:28:02

+0

我使用SWIG for C only,o它不應該是一個問題 – hhafez 2010-04-11 01:12:58

0

請編寫實際的可執行代碼片段;不要指望回答你的問題的人首先修正你的代碼。

class MyClass(object): 
    text = "hello" 
    number = 123 

for a in dir(MyClass): 
    print a 
+0

無論如何,我只是忘了':' – hhafez 2010-04-10 04:48:48

+0

@hhafez,你也錯過了課程 – 2010-04-10 04:54:43

+0

今天我沒注意 – hhafez 2010-04-10 10:34:55

0
>>> import cmath 
>>> dir(cmath) 
['__doc__', '__file__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'isinf', 'isnan', 'log', 'log10', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] 
>>> cmath.atan 
<built-in function atan> 

dir能夠和

open("/usr/lib/python2.6/lib-dynload/cmath.so", O_RDONLY) = 4 
read(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\[email protected]\17\0\0004\0\0\0"..., 512) = 512 
fstat64(4, {st_mode=S_IFREG|0644, st_size=32176, ...}) = 0 
mmap2(NULL, 43824, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 4, 0) = 0x268000 
mmap2(0x26f000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 4, 0x6) = 0x26f000 
mmap2(0x271000, 6960, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x271000 
close(4) 

動態加載

相關問題