使用isinstance()检查类变量的所有权

时间:2015-09-29 09:32:28

标签: python enums

我想使用 isinstance()方法来识别它属于给定类的类变量。

我创建了一个自己的 Enum()基类来列出子类的类变量。 我没有详细说明源代码,不重要。

class Enum(object):

    @classmethod
    def keys(cls):
        pass  # Returns all names of class varables.

    @classmethod
    def values(cls):
        pass  # Returns all values of class varables

    @classmethod
    def items(cls):
        pass # Returns all class variable and its value pairs.

class MyEnum(Enum):
    MyConstantA = 0
    MyConstantB = 1

>>>MyEnum.keys()
['MyConstantA', 'MyConstantB']

我想用这个:

>>>isinstance(MyEnum.MyConstantB, MyEnum)
True

2 个答案:

答案 0 :(得分:0)

Enum成为Python 3.4中的官方数据类型,there is a backport here成为docs here

isinstance()可以按照您的意愿工作,并获取您将使用的成员的姓名:

myEnum.__members__.keys()

虽然MyEnum['MyConstantA']MyEnum(0)都会返回MyEnum.MyConstantA成员。

答案 1 :(得分:-1)

看起来普通字典可以做你想做的事情:

>>> myEnum = {'MyConstantA': 0, 'MyConstantB': 1}

或者让enumerate进行计数:

>>> myEnum = {k: i for i, k in enumerate(['MyConstantA', 'MyConstantB'])}

然后:

>>> myEnum.keys()
['MyConstantA', 'MyConstantB']
>>> myEnum.values()
[0, 1]
>>> myEnum.items()
[('MyConstantA', 0), ('MyConstantB', 1)]
>>> 'MyConstantB' in myEnum
True

如果您真的想编写自己的类,请使用hasattr来测试类变量的存在:

>>> class Foo:
...     bar = 5
...
>>> hasattr(Foo, 'bar')
True