我有一个带有一些常量和函数的冻结数据类,它接受此类中的任何常量作为参数。
我怎样才能输入这个机制?我需要告诉用户该函数等待此特定数据类中的任何字段的值。
它应该看起来像这样:
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
所以,更新后的主要问题是:如何在代码中聚合逻辑组中的常量以简化其使用(数据类或枚举)以及如何输入相应的解决方案。
您想在此处使用枚举而不是数据类:
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 类型检查器进行测试。