Python3:如何在继承时强制泛型 TypeVar 的不同绑定

Python3: How to force different bound of generic TypeVar on inheritance

让我们假设以下代码;

from typing import Generic, TypeVar

class A1:
    x: int = 1

class A2(A1):
    y: int = -1

T = TypeVar("T", bound=A1)

class B1(Generic[T]):
    def __init__(self, a: T):
        self.a: T = a

class B2(B1):
    def __init__(self, a: T):
        self.a: T = a

我想让用户知道 B2.__init__ 中的参数(和状态)a 应该是 A2 的子类,但似乎很难找到这样的方法。我发现的一种可能方法是:

T2 = TypeVar("T2", bound=A2)

class B2(B1, Generic[T2]):
    def __init__(self, a: T2):
        self.a = a

但我不知道如果有两个 Generic 类 可用,静态类型检查器会发生什么情况。哪种方式最安全优雅地解决这种情况?

我用的是Python3.10.4.

B1 class 在 B2 声明中缺少类型参数。添加 T2 作为类型参数是正确的,因为 A2A1.

的子 class
from typing import Generic, TypeVar


class A1:
    x: int = 1


class A2(A1):
    y: int = -1


T = TypeVar("T", bound=A1)
T2 = TypeVar("T2", bound=A2)


class B1(Generic[T]):
    def __init__(self, a: T):
        self.a: T = a


class B2(B1[T2]):
    def __init__(self, a: T2):
        self.a = a