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
作为类型参数是正确的,因为 A2
是 A1
.
的子 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
让我们假设以下代码;
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
作为类型参数是正确的,因为 A2
是 A1
.
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