[英]Enums in Python: isInstance error
此代码有什么问题,该实现正确吗?
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
您得到的错误非常清楚:
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(filters, Test.Filters)
filters in self.Filters
( Test
和self
可以互换。)
如果您想知道filters
参数是否为Test.Filters.B
则可以进行简单的比较:
filters is self.Filters.B
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.