如何从 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]
我有一个 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]