Ric*_*ano 11 python attributes class python-3.x
有另一种方式只通过一个自定义类的属性没有被内置(比如迭代__dict__
,__module__
等等)?例如,在此代码中:
class Terrain:
WATER = -1
GRASS = 0
HILL = 1
MOUNTAIN = 2
Run Code Online (Sandbox Code Playgroud)
我可以遍历所有这些属性,如下所示:
for key, value in Terrain.__dict__.items():
print("{: <11}".format(key), " --> ", value)
Run Code Online (Sandbox Code Playgroud)
哪个输出:
MOUNTAIN --> 2
__module__ --> __main__
WATER --> -1
HILL --> 1
__dict__ --> <attribute '__dict__' of 'Terrain' objects>
GRASS --> 0
__weakref__ --> <attribute '__weakref__' of 'Terrain' objects>
__doc__ --> None
Run Code Online (Sandbox Code Playgroud)
如果我只想要整数参数(枚举类型的基本版本),我可以使用:
for key, value in Terrain.__dict__.items():
if type(value) is int: # type(value) == int
print("{: <11}".format(key), " --> ", value)
Run Code Online (Sandbox Code Playgroud)
这给出了预期的结果:
MOUNTAIN --> 2
WATER --> -1
HILL --> 1
GRASS --> 0
Run Code Online (Sandbox Code Playgroud)
是否可以仅迭代独立于类型的自定义类的非内置属性,例如,如果属性不是全部整数.据推测,我可以扩展条件以包含更多类型,但我想知道是否还有其他方法我缺少.
Ned*_*der 19
我会用:
for key, value in Terrain.__dict__.items():
if not key.startswith("__"):
print(...)
Run Code Online (Sandbox Code Playgroud)
或者我会创建一个实际的枚举类型,它做了我想要的.