此代码有什么问题,并且该实现是否正确?
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
答案 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
(Test
和self
可以互换。)
如果您想知道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