将 flattbuffer 枚举与 mypy 一起使用

问题描述 投票:0回答:1

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?

python types mypy
1个回答
0
投票

目前

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
函数,它是一个有效的类型。

© www.soinside.com 2019 - 2024. All rights reserved.