我试图在类中添加类型提示,但是我在模块级常量这一特殊问题上苦苦挣扎。在下面的示例中,我用BLUECAR,REDCAR,YELLOWCAR,WHITECAR替换了我的常量-仅仅假设我的整个程序都是围绕这4个常量演化的,这就是为什么我要明确定义它们的原因。
from collections import namedtuple
from typing import List,Union,TypeVar
# I define CarTypeRef from id and name
CarTypeRef = namedtuple("CarType","id name")
# I define possible car types by id and name
BLUECAR: CarTypeRef = CarTypeRef (1,'Blue Car')
REDCAR: CarTypeRef = CarTypeRef (2,'Red Car')
YELLOWCAR: CarTypeRef = CarTypeRef (3,'Yellow Car')
WHITECAR: CarTypeRef = CarTypeRef (4,'White Car')
"""Car type init with id-name"""
# 1. try: this does not work:
CarType = TypeVar("CarType",BLUECAR,REDCAR,YELLOWCAR,WHITECAR)
"""Type alias for possible car types"""
# 2. try: this (type alias) does also not work:
CarType = Union[BLUECAR,WHITECAR]
# I later use the following list
# e.g. to loop through available car types
CARTYPES: List[CarType] = [
BLUECAR,WHITECAR]
"""Available car types"""
对于这两种类型定义,我都会在运行时得到以下输出:
> 1.try: TypeError: Union[arg,...]: each arg must be a type. Got CarType(id=1,name='Blue Car').
> 2. try: TypeError: TypeVar(name,constraint,...): constraints must be types. Got CarType(id=1,name='Blue Car').
我在做什么错?如何为这4个常量创建自定义类型检查?
注意:当然,我可以简单地使用字符串(例如:“ bluecar”,“ redcar”,..),但是由于这4个常量在我的代码中出现的频率很高,所以我想更明确一些-出于代码易读性和静态类型测试的目的。