为什么仅当构造函数具有参数时才需要泛型

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] = []

您将看到错误。