我在Python中有以下课程。
class RULES(object):
TOTAL_REQUESTS = 'totalrequests'
HTML_SIZE = 'htmlsize'
JS_SIZE = 'jssize'
JS_COUNT = 'jscount'
DOMAIN_COUNT = 'domaincount'
REQ_PER_DOMAIN = 'reqperdomain'
DOMAIN_WITH_MAX_REQUESTS = 'domainwithmaxrequests'
IMAGE_SIZE = 'imagesize'
IMAGE_COUNT = 'imagecount'
HIGHEST_LATENCY_OBJECT = 'highestlatencyobject'
LARGEST_SIZE_OBJECT = 'largestsizeobject'
VARY_HEADER_OBJECTS = 'varyheaderobjects'
ERROR_RESPONSES = 'errorresponses'
COOKIE_REQUESTS = 'cookierequests'
TTFB_REQUESTS = 'ttfb_requests'
UNCACHED = 'uncached'
UNCOMPRESSED = 'uncompressed'
SPRITABLE = 'spritable'
MULTIPLE_REQUESTS = 'multiplerequests'
INLINABLE = 'inlinable'
NO_SERVER_CACHE = 'noservercache'
MORE_TTL = 'morettl'
MEDIAN_LOAD_TIME = 'median_load_time'
AVG_LOAD_TIME = 'avgloadtime'
DNS = 'dns'
HOST_TTL = 'host_ttl'
ORIGIN_TTL = 'origin_ttl'
THIRD_PARTY_HTTPS_REQ = 'thirdpartyhttpsreq'
现在,我需要编写一种方法来遍历所有属性并将它们作为列表返回。我尝试访问单个属性为
RULES.HOST_TTL
,但请确定如何遍历它们。python中有没有一种方法可以做到这一点。
使用该dir
功能。它可能会为您提供比您想要的更多的东西,但是您可以对其进行过滤(例如,仅输入ALL_CAPS个单词)。
样本:
>>> class RULES(object):
... TOTAL_REQUESTS = 'totalrequests'
... HTML_SIZE = 'htmlsize'
... JS_SIZE = 'jssize'
... JS_COUNT = 'jscount'
... DOMAIN_COUNT = 'domaincount'
... REQ_PER_DOMAIN = 'reqperdomain'
... DOMAIN_WITH_MAX_REQUESTS = 'domainwithmaxrequests'
... IMAGE_SIZE = 'imagesize'
...
>>> import re
>>> all_caps = re.compile('^[A-Z_]+$')
>>> [attr for attr in dir(RULES) if all_caps.match(attr)]
['DOMAIN_COUNT', 'DOMAIN_WITH_MAX_REQUESTS', 'HTML_SIZE', 'IMAGE_SIZE', 'JS_COUNT', 'JS_SIZE', 'REQ_PER_DOMAIN', 'TOTAL_REQUESTS']
一旦有了名称,就很容易获得价值:
[getattr(RULES, attr) for attr in dir(fules) if all_caps.match(attr)]
最后,如果您愿意使用其他类型,则可以在此处使用枚举。enum
直到python3.4才被添加到标准库中,但是python2.x有反向移植。我相信您的要求将如下所示:
class RULES(enum.Enum):
X = 'foo'
Y = 'bar'
# ...
for name, attr in RULES.__members__.items():
print(name, attr.value)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句