有没有其他方法来迭代自定义类的属性,不包括内置类的属性?

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)

或者我会创建一个实际的枚举类型,它做了我想要的.