You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建关联属性绑定的Python复合泛型类型?

实现关联Token组的泛型复合类型

你可以通过枚举+类型映射+泛型绑定的方式,把同组的AccessToken和RefreshToken绑定成不可拆分的关联类型,这样只用指定一个Token组标识,就能自动推导对应的两种Token类型。

具体实现步骤

  1. 补全并修正基础类型定义:
from typing import Generic, NewType, TypeVar, TypeAlias
from enum import Enum

# 基础Token类型别名
AccessToken: TypeAlias = str
RefreshToken: TypeAlias = str

# 各Token组的具体类型
XAccessToken = NewType("XAccessToken", AccessToken)
YAccessToken = NewType("YAccessToken", AccessToken)

XRefreshToken = NewType("XRefreshToken", RefreshToken)
YRefreshToken = NewType("YRefreshToken", RefreshToken)
  1. 定义Token组枚举与类型映射:
# 定义Token组枚举,作为标识
class TokenGroup(Enum):
    X = "x"
    Y = "y"

# 建立Token组到对应Token类型的绑定关系
TokenTypeMap = {
    TokenGroup.X: (XAccessToken, XRefreshToken),
    TokenGroup.Y: (YAccessToken, YRefreshToken),
}

# 限定泛型参数只能是TokenGroup的成员
T = TypeVar("T", bound=TokenGroup)
  1. 重写泛型AuthorizationData类,自动推导关联类型:
class AuthorizationData(Generic[T]):
    access_token: TokenTypeMap[T][0]
    refresh_token: TokenTypeMap[T][1]

    def __init__(self, access_token: TokenTypeMap[T][0], refresh_token: TokenTypeMap[T][1]):
        self.access_token = access_token
        self.refresh_token = refresh_token
  1. 使用示例:
class AuthorizationDataSet:
    x: AuthorizationData[TokenGroup.X]
    y: AuthorizationData[TokenGroup.Y]

# 类型检查会自动校验Token组匹配
x_auth = AuthorizationData[TokenGroup.X](XAccessToken("x-access-token"), XRefreshToken("x-refresh-token"))
# 若传入错误组的Token,类型检查工具(如mypy)会直接报错
# x_auth = AuthorizationData[TokenGroup.X](YAccessToken("y-access-token"), XRefreshToken("x-refresh-token"))  # 类型不匹配

另一种简洁实现方式(基于TypedDict)

如果不想用枚举,也可以通过TypedDict直接定义Token组的类型关联:

from typing import Generic, NewType, TypeVar, TypedDict

AccessToken: TypeAlias = str
RefreshToken: TypeAlias = str

XAccessToken = NewType("XAccessToken", AccessToken)
YAccessToken = NewType("YAccessToken", AccessToken)

XRefreshToken = NewType("XRefreshToken", RefreshToken)
YRefreshToken = NewType("YRefreshToken", RefreshToken)

# 定义每个Token组的类型结构
class TokenGroupX(TypedDict):
    access_token: XAccessToken
    refresh_token: XRefreshToken

class TokenGroupY(TypedDict):
    access_token: YAccessToken
    refresh_token: YRefreshToken

T = TypeVar("T", TokenGroupX, TokenGroupY)

class AuthorizationData(Generic[T]):
    access_token: T["access_token"]
    refresh_token: T["refresh_token"]

# 使用
class AuthorizationDataSet:
    x: AuthorizationData[TokenGroupX]
    y: AuthorizationData[TokenGroupY]

以上两种方式都能实现你的需求:通过单一标识(枚举成员或TypedDict类型),让AuthorizationData自动关联对应组的两种Token类型,避免拆分或传错类型。

内容的提问来源于stack exchange,提问作者Marek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:13:10