关于python:循环遍历类似枚举的所有变量

Loop over all variables in class that acts like enum

我有一个类似于枚举的类。
我想循环他的变量(枚举的值)

1
2
3
4
5
6
7
8
9
10
11
12
class Demos(object):
    class DemoType(object):
        def __init__(self, name):
            self.name = name

        def __repr__(self):
            return self.name

    VARIABLE1 = DemoType("Car")
    VARIABLE2 = DemoType("Bus")
    VARIABLE3 = DemoType("Example")
    VARIABLE4 = DemoType("Example2")

我想过使用Role.__dict__vars(Role),但它们不仅包含变量,还包含RoleType类和其他属性,如__module____doc__以上......

我也希望它像这样表示,主要是因为它会向DemoType添加更多变量。 name以外的变量,所以请尝试以这种方式找到答案。


而不是重新发明枚举类型,最好使用Python的Enum类型(也已经向后移植)。 然后你的代码看起来像

1
2
3
4
5
6
7
8
9
class Demos(Enum):
    VARIABLE1 ="Car"
    VARIABLE2 ="Bus"
    VARIABLE3 ="Example"
    VARIABLE4 ="Example2"


--> for variable in Demos:
...    print variable


我找到了答案,并没有重复我怎样才能在Python中代表'Enum'? 一点都不
答案是通过以下list comprehensive创建以下list

1
2
variables = [attr for attr in dir(Demos()) if not attr.startswith("__") and not callable(attr)]
print variables

我也可以通过这种方式为我创建一个函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Demos(object):
    class DemoType(object):
        def __init__(self, name):
            self.name = name

        def __repr__(self):
            return self.name

    @classmethod
    def get_variables(cls):
        return [getattr(cls, attr) for attr in dir(cls) if not callable(getattr(cls, attr)) and not attr.startswith("__")]

    VARIABLE1 = DemoType("Car")
    VARIABLE2 = DemoType("Bus")
    VARIABLE3 = DemoType("Example")
    VARIABLE4 = DemoType("Example2")


for variable in Demos.get_variables():
    print variable