Python:有没有办法反复列出类的所有属性

时间:2010-04-10 04:36:30

标签: python reflection swig

给出一个类

class MyClass:
    text = "hello"
    number = 123

在python中是否有办法检查MyClass,确定它有两个属性textnumber。我不能使用inspect.getSource(object)这样的东西,因为我要获取它的属性是使用SWIG生成的(因此它们隐藏在.so :)中。

所以我真的在寻找与Java [Class.getDeclardFields][1]

等同的东西

任何帮助都将不胜感激,否则我将不得不用SWIG + JAVA而不是SWIG + Python来解决这个问题。

3 个答案:

答案 0 :(得分:8)

我通常只使用dir(MyClass)。也适用于实例化对象。

修改 我应该提一下这是一个简写函数,用于确定我的对象是否正确创建。如果您以编程方式执行此操作,则可能需要更仔细地查看反射API。

它也可能不适用于链接库。

答案 1 :(得分:0)

请写出实际的可执行代码段;不要指望人们回答您的问题,先修复您的代码。

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

for a in dir(MyClass):
    print a

答案 2 :(得分: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\0@\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)

是动态加载的