Flattbuffer 为枚举生成这样的 Python 代码 ->
class ErrorType(object):
ERROR1 = 0
ERROR2 = 1
我想将它用作函数中的类型->
def my_function(error: ErrorType):
pass
如果我现在用
调用它my_function(ErrorType.ERROR1)
这可行,但 mypy 不知何故认为
ErrorType.ERROR1
只是一个 int。
test.py:8: error: Argument 1 to "my_function" has incompatible type "int"; expected "ErrorType" [arg-type]
Found 1 error in 1 file (checked 1 source file)
有没有办法构造一个非int的ErrorType?
目前
ErrorType
是一个常规类,ErrorType.ERROR1
是一个简单的类变量,它是一个 int
。
你的类必须继承自
enum.Enum
类:
from enum import Enum
class ErrorType(Enum):
ERROR1 = 0
ERROR2 = 1
那个
Enum
类有一个名为 EnumType
的元类,它神奇地将这些类变量转换为 ErrorType
的实例,现在是 Enum
类型:
from enum import Enum
class ErrorType(Enum):
ERROR1 = 0
ERROR2 = 1
print(isinstance(ErrorType.ERROR1, ErrorType)) # True
现在您可以将
ErrorType.ERROR1
传递给您的 my_function
函数,它是一个有效的类型。