列出类别的属性值

时间:2019-01-29 20:52:00

标签: python-3.x

如何使用python 3.7动态创建一个包含类的所有属性值的列表?

class Toolchain:
    VS2008 = 'VS2008'
    VS2015 = 'VS2015'
    VS2017 = 'VS2017'
    VS2017_08 = 'VS2017-08'
    GCC = 'gcc'
    CLANG = 'clang'

    # LIST should contains: ['VS2008', 'VS2015', 'VS2017', 'VS2017-08', 'gcc', 'clang']

我尝试使用列表推导,例如:

LIST = [eval(param) for param in dir() if not param.startswith('_')]

但是我得到一个错误:

NameError: name 'CLANG' is not defined

1 个答案:

答案 0 :(得分:1)

正如@ juanpa.arrivillaga指出的那样,您可以通过__dict__或更易读的vars()函数访问类属性。知道这些方法返回字典后,您就可以使用items()进行列表理解了。

LIST = [val for key, val in vars(Toolchain).items() if not key.startswith('_')]

这应该为您提供以下输出:

['VS2008', 'VS2015', 'VS2017', 'VS2017-08', 'gcc', 'clang']