如何在函数签名中输入提示数据类字段

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

我有一个带有一些常量和函数的冻结数据类,它接受此类中的任何常量作为参数。
我怎样才能输入这个机制?我需要告诉用户该函数等待此特定数据类中的任何字段的值。
它应该看起来像这样:

from dataclasses import dataclass


@dataclass(frozen=True)
class Consts:
    const_0: int = 0
    const_1: int = 1
    const_2: int = 2
    const_3: int = 3


def foo(param: Consts.field):
    return param

UPD
根据 @JaredSmith 提示,我尝试使用 Enum。看起来很正确。但问题依然存在。
我尝试过使用

typing.Literal
,如下所示:

def foo(param: Literal[Consts.const_0, Consts.const_1]):
    return param

但它不会给出正确的类型提示。如果

foo(Consts)
我们会得到这个,不是很明显,警告:
Expected type 'Consts', got 'Type[Consts]' instead 
而不是类似的东西:
Expected type Consts.value got Consts instead

所以,更新后的主要问题是:如何在代码中聚合逻辑组中的常量以简化其使用(数据类或枚举)以及如何输入相应的解决方案。

python python-3.x type-hinting typing python-dataclasses
1个回答
0
投票

您想在此处使用枚举而不是数据类:

from enum import IntEnum

class MyEnum(IntEnum):
    A = 1
    B = 2

def foo(x: MyEnum):
    if (x == 1):
        return '1 given'
    else:
        return 'whatever'

foo(MyEnum.A) # Ok
foo(1)        # Error 
foo('pizza')  # Error

针对 Pyright 类型检查器进行测试。

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