常量作为 int bitflag 的类型提示

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

我有这个代码:

class Thing():
    FLAG_FOO = 1;
    FLAG_BAR = 2;
    FLAG_JOE = 4;

def call (self, flags: int) -> None:
    ...

方法

Thing.call()
应该只接受以
FLAG_*
开头的一个或多个值,我如何为此添加类型提示?

我希望,在 VS Code 或支持类型提示的 IDE 上,当我编写函数时,它会显示所有可能的可用值,如下所示:

t = Thing();
t.call( ... );
        # popup menu that show options:
        # Thing.FLAG_FOO
        # Thing.FLAG_BAR
        # Thing.FLAG_JOE

我看到一些模块可以使用文字字符串来做到这一点,但这可以使用 int 位标志吗?

python mypy python-typing
1个回答
0
投票

使用

enum.IntFlag

from enum import IntFlag

class Thing(IntFlag):
    FLAG_FOO = 1
    FLAG_BAR = 2
    FLAG_JOE = 4

    def call(self, flags: 'Thing') -> None:
        pass

类型注释指定您需要传递

Thing
(请注意,对于
Enum
,这意味着您定义为枚举的类变量之一;mypy 理解枚举的工作原理,如果您尝试传递某些内容,则会出错else 作为参数),当您输入
Thing.
时,您将在 IDE 的自动完成中看到成员:

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