2

我有一个像枚举一样的类。我想遍历他的变量(枚举值)

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__, or vars(Role),但它们不仅包含变量,还包含RoleType类和其他属性,如__module__. __doc__和更多...

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

4

2 回答 2

1

与其重新发明 enum 类型,不如使用 Python 的Enum类型(也已被反向移植)。然后你的代码可能看起来像

class Demos(Enum):
    VARIABLE1 = "Car"
    VARIABLE2 = "Bus"
    VARIABLE3 = "Example"
    VARIABLE4 = "Example2"


--> for variable in Demos:
...    print variable
于 2013-11-01T19:39:38.713 回答
0

我找到了答案,它不是我如何在 Python 中表示“枚举”的副本?一点也不。答案是list通过以下方式创建以下内容list comprehensive

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

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

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
于 2013-11-01T18:28:51.513 回答