如何从 python class 中的实例变量中获取所有值的列表

How to get a list of all values from instance variables in a python class

我有一个 class 看起来像这样:

class HTTP_HEADERS:
    ACCEPT = "X-Accept"
    DECLINE = "X-Decline"

要从 class 中获取所有变量名,我可以按照以下方式做一些事情:

members = [
        attr for attr in dir(HTTP_HEADER)
        if not callable(getattr(HTTP_HEADER, attr))
        and not attr.startswith("__")
    ]

这将 return 变量名列表,如下所示:

["ACCEPT", "DECLINE"]

现在我要做的是将这些变量的值放入列表中。例如输出应该是:

["X-Accept", "X-Decline"]

我怎样才能成功做到这一点?

如果你有这个:

class HTTP_HEADER:
    ACCEPT = "X-Accept"
    DECLINE = "X-Decline"

names = ["ACCEPT", "DECLINE"]

获取值只是一件简单的事情

values = [getattr(HTTP_HEADER, name) for name in names]

不过我认为字典更合适,只需对您的原始代码进行最少的更改即可完成:

members = {
        k: v for k, v in vars(HTTP_HEADER).items()
        if not callable(v)
        and not k.startswith("__")
    }

这给出了

{'ACCEPT': 'X-Accept', 'DECLINE': 'X-Decline'}

再次使用getattr访问class变量

[getattr(HTTP_HEADERS,m) for m in members]

输出

['X-Accept', 'X-Decline']

您应该将其定义为 Enum

class HTTP_HEADERS(enum.Enum):
    ACCEPT = "X-Accept"
    DECLINE = "X-Decline"

现在你可以简单地做:

[x.value for x in HTTP_HEADERS]