[英]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.