Python中的枚举:isInstance错误

时间:2016-02-19 10:46:45

标签: python enums

此代码有什么问题,并且该实现是否正确?

from enum import Enum

class Test(object):
    Filters = Enum('Filters', 'A B C')  
    def __init__(self):
        pass

    def aaa(self, filters):
        if(isinstance(filters, self.Filters.B)):
            print 'OK'
        else:
            print 'NOT OK'
if __name__ == '__main__':
    Test().aaa(Test.Filters.B)

错误是:

Traceback (most recent call last):
  File "test.py", line 14, in <module>
    Test().aaa(Test.Filters.B)
  File "test.py", line 9, in aaa
    if(isinstance(filters, Test.Filters.B)):
TypeError: isinstance() arg 2 must be a type or tuple of types

3 个答案:

答案 0 :(得分:1)

你得到的错误很清楚:

TypeError: isinstance() arg 2 must be a type or tuple of types

Filters.B不是类或类型。不要使用isinstance,只需将您获得的值与您想要的值进行比较:

if filters is Test.Filters.B:

此外,Filters是类的属性,而不是实例的属性,因此您可能宁可使用Test.Filters,尽管self.Filters似乎也有用。

答案 1 :(得分:1)

如果您想知道filters参数是否是Test.Filters枚举的成员,您有三个选择

  • isinstance(filters, Test.Filters)
  • filters in self.Filters

Testself可以互换。)

如果您想知道filters参数是否为Test.Filters.B,那么简单的比较就可以了:

filters is self.Filters.B

答案 2 :(得分:0)

self.Filters.B 

未定义。你定义了

Filters.B

此外:

self.Filters.B

需要:

type(self.Filters.B)

它的工作原理如下:

class A():
    pass

isinstance(3, int) == True
isinstance(3,type(4)) == True
isinstance("hello", type('something')) == True
isinstance("hello", str) == true
isinstance(A(), type(A())) == True
isinstance(A(), A) == True