簡體   English   中英

Python中的枚舉:isInstance錯誤

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

Testself可以互換。)

如果您想知道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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM