代码之家  ›  专栏  ›  技术社区  ›  hhafez

python:有没有办法反射地列出类的所有属性

  •  4
  • hhafez  · 技术社区  · 14 年前

    给一个类,比如

    class MyClass:
        text = "hello"
        number = 123
    

    python中是否有方法检查myclass并确定它具有两个属性 text number . 我不能用这样的东西 inspect.getSource(object) 因为我要获取的类的属性是使用swig生成的(所以它们隐藏在.so:))。

    所以我真的在寻找与Java相当的东西。 [Class.getDeclardFields][1]

    任何帮助都是值得感激的,否则,我将不得不解决这个问题,而不是用酒+爪哇+红+ Python。

    3 回复  |  直到 14 年前
        1
  •  8
  •   Garrett Bluma    14 年前

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

    编辑: 我应该提到这是一个速记函数,我用它来判断我的对象是否被正确创建。如果您是以编程方式执行此操作,则可能需要更仔细地查看反射api。

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

        2
  •  0
  •   Glenn Maynard    14 年前

    请编写实际的、可执行的代码片段;不要指望回答您问题的人首先修复您的代码。

    class MyClass(object):
        text = "hello"
        number = 123
    
    for a in dir(MyClass):
        print a
    
        3
  •  0
  •   msw    14 年前
    >>> 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)
    

    是动态加载的