为什么仅当构造函数具有参数时才需要泛型
Why do I need a generic only when the constructor has a parameter
from typing import TypeVar
T = TypeVar('T')
class MyList:
def __init__(self):
self.my_list: list[T] = []
class MyListWithX:
def __init__(self, x: int):
self.my_list: list[T] = []
第一个 class 工作正常,第二个 class 抛出以下错误
main.py:11: error: Type variable "main.T" is unbound
main.py:11: note: (Hint: Use "Generic[T]" or "Protocol[T]" base class to bind "T" inside a class)
main.py:11: note: (Hint: Use "T" in function signature to bind "T" inside a function)
它告诉我们如何解决它,那是不是的问题,我的问题是
为什么只有当我的构造函数有参数时才需要使用泛型(自排除)
不是你的构造函数有参数,而是它有类型注释(恰好在你的参数上)。默认情况下,类型检查仅在其定义中具有类型注释的函数上启用。如果你这样做:
from typing import TypeVar
T = TypeVar('T')
class MyList:
def __init__(self) -> None:
self.my_list: list[T] = []
您将看到错误。
from typing import TypeVar
T = TypeVar('T')
class MyList:
def __init__(self):
self.my_list: list[T] = []
class MyListWithX:
def __init__(self, x: int):
self.my_list: list[T] = []
第一个 class 工作正常,第二个 class 抛出以下错误
main.py:11: error: Type variable "main.T" is unbound
main.py:11: note: (Hint: Use "Generic[T]" or "Protocol[T]" base class to bind "T" inside a class)
main.py:11: note: (Hint: Use "T" in function signature to bind "T" inside a function)
它告诉我们如何解决它,那是不是的问题,我的问题是
为什么只有当我的构造函数有参数时才需要使用泛型(自排除)
不是你的构造函数有参数,而是它有类型注释(恰好在你的参数上)。默认情况下,类型检查仅在其定义中具有类型注释的函数上启用。如果你这样做:
from typing import TypeVar
T = TypeVar('T')
class MyList:
def __init__(self) -> None:
self.my_list: list[T] = []
您将看到错误。