如何检查 python 中的变量是否为枚举类型
how to check if a variable is of type enum in python
我有一个这样的枚举
@enum.unique
class TransactionTypes(enum.IntEnum):
authorisation = 1
balance_adjustment = 2
chargeback = 3
auth_reversal = 4
现在我正在为这个枚举分配一个变量,就像这样
a = TransactionTypes
我想检查 'a' 的类型,如果它是枚举就做一些事情,如果它不是枚举就做一些其他事情
我试过这样的东西
if type(a) == enum:
print "do enum related stuff"
else:
print "do something else"
问题是它不能正常工作。
Now i am assigning a variable with this enum like this
a = TransactionTypes
我希望你不是,因为你刚刚分配给 a
的是整个枚举,而不是它的成员之一(例如 TransactionTypes.chargeback
)如果那真的是你想要的做,那么正确的测试是:
if issubclass(a, enum.Enum)
但是,如果您的意思是:
a = TransactionTypes.authorisation
那么您需要的测试是:
# for any Enum member
if isinstance(a, Enum):
或
# for a TransactionTypes Enum
if isinstance(a, TransactionTypes):
可靠的解决方案:
from enum import IntEnum
from collections import Iterable
def is_IntEnum(obj):
try:
return isinstance(obj, Iterable) and isinstance (next(iter(obj)), IntEnum)
except:
return False # Handle StopIteration, if obj has no elements
我以为我有一个丑陋的方式。例如:
print(o.__class__.__class__)
输出:
<enum.EnumMeta>
如前所述,使用 isinstance 方法检查实例是否为 enum.Enum
类型。
用于演示其用法的小工作代码:
import enum
class STATUS(enum.Enum):
FINISHED = enum.auto()
DELETED = enum.auto()
CANCELLED = enum.auto()
PENDING = enum.auto()
if __name__ == "__main__":
instance = STATUS.CANCELLED
if isinstance(instance, enum.Enum):
print('name : ', instance.name, ' value : ', instance.value)
else:
print(str(instance))
输出:
name : CANCELLED value : 3
我有一个这样的枚举
@enum.unique
class TransactionTypes(enum.IntEnum):
authorisation = 1
balance_adjustment = 2
chargeback = 3
auth_reversal = 4
现在我正在为这个枚举分配一个变量,就像这样
a = TransactionTypes
我想检查 'a' 的类型,如果它是枚举就做一些事情,如果它不是枚举就做一些其他事情
我试过这样的东西
if type(a) == enum:
print "do enum related stuff"
else:
print "do something else"
问题是它不能正常工作。
Now i am assigning a variable with this enum like this
a = TransactionTypes
我希望你不是,因为你刚刚分配给 a
的是整个枚举,而不是它的成员之一(例如 TransactionTypes.chargeback
)如果那真的是你想要的做,那么正确的测试是:
if issubclass(a, enum.Enum)
但是,如果您的意思是:
a = TransactionTypes.authorisation
那么您需要的测试是:
# for any Enum member
if isinstance(a, Enum):
或
# for a TransactionTypes Enum
if isinstance(a, TransactionTypes):
可靠的解决方案:
from enum import IntEnum
from collections import Iterable
def is_IntEnum(obj):
try:
return isinstance(obj, Iterable) and isinstance (next(iter(obj)), IntEnum)
except:
return False # Handle StopIteration, if obj has no elements
我以为我有一个丑陋的方式。例如:
print(o.__class__.__class__)
输出:
<enum.EnumMeta>
如前所述,使用 isinstance 方法检查实例是否为 enum.Enum
类型。
用于演示其用法的小工作代码:
import enum
class STATUS(enum.Enum):
FINISHED = enum.auto()
DELETED = enum.auto()
CANCELLED = enum.auto()
PENDING = enum.auto()
if __name__ == "__main__":
instance = STATUS.CANCELLED
if isinstance(instance, enum.Enum):
print('name : ', instance.name, ' value : ', instance.value)
else:
print(str(instance))
输出:
name : CANCELLED value : 3