Python: 有没有方法可以反射列出类的所有属性
假设我们有一个这样的类:
class MyClass:
text = "hello"
number = 123
在Python中,有没有办法检查一下MyClass,看看它是否有两个属性:text
和number
?我不能使用像inspect.getSource(object)
这样的东西,因为我需要获取属性的类是通过SWIG生成的(所以它们隐藏在.so文件里 :))。
所以我其实是在寻找一个类似于Java的[Class.getDeclaredFields][1]
的方法。
如果有人能帮忙就太好了,不然我就得用SWIG + JAVA来解决这个问题,而不是SWIG + Python。
3 个回答
-1
请提供可以直接运行的代码片段,不要指望别人回答你的问题之前先帮你修正代码。
class MyClass(object):
text = "hello"
number = 123
for a in dir(MyClass):
print a
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>
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)
是可以用dir
来查看的,并且
是动态加载的
8
我通常只用 dir(MyClass)
这个命令。这个方法在实例化的对象上也能用。
补充说明:我应该提一下,这其实是我用来检查我的对象是否正确创建的一个简便方法。如果你是想通过程序来做这件事,可能需要更仔细地研究一下反射API。
另外,这个方法可能在链接的库上不太好用。