Python中的枚举:isInstance错误

Python中的枚举:isInstance错误,python,enums,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

这段代码有什么问题,实现正确吗

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
回溯(最近一次呼叫最后一次):
文件“test.py”,第14行,在
Test().aaa(Test.Filters.B)
aaa中第9行的文件“test.py”
如果(isinstance(filters,Test.filters.B)):
TypeError:isinstance()arg 2必须是类型或类型的元组
没有定义。你定义

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

您得到的错误很明显:

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
似乎也可以工作。

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

  • isinstance(过滤器、测试过滤器)
  • 在self.filters中进行筛选
Test
self
可以互换。)


如果您想知道
filters
参数是否为
Test.filters.B
,则可以进行简单的比较:

filters is self.Filters.B

你试过执行它吗?如果没有,错误信息是什么?没有,这不是问题。我不明白。如何修复它,甚至更好。应该如何正确地做到这一点?请注意,使用
if isinstance(filters,type(self.filters.B))
(或者不管你做了什么,答案并不清楚)只会检查
filters
是否是
Filter
,而不是
Filter.B
。尝试将
Fitler.A
作为参数传递。
isinstance(A(),键入(A))==True
错误<代码>类型(A)是
类型
。您可以执行
isinstance(A(),A)
type(A())==A
,但是
isinstance(A(),type(A))
不起作用。感谢大家提供的帮助和详细信息!你真棒!我终于明白了!用于IronPython:
在self.Filter中筛选
if filters is Test.Filters.B:
filters is self.Filters.B