类在python中继承泛型的目的是什么?

时间:2019-11-05 09:49:36

标签: python python-typing

这两个代码有什么区别?

from typing import TypeVar, Generic
from logging import Logger

T = TypeVar('T')

class LoggedVar(Generic[T]):
    def __init__(self, value: T, name: str, logger: Logger) -> None:
        self.name = name
        self.logger = logger
        self.value = value

from typing import TypeVar
from logging import Logger

T = TypeVar('T')

class LoggedVar:
    def __init__(self, value: T, name: str, logger: Logger) -> None:
        self.name = name
        self.logger = logger
        self.value = value

我不明白将Generic作为LoggedVar的基类有何特别之处。有人可以向我解释吗?

谢谢。

1 个答案:

答案 0 :(得分:2)

第一个版本是通用类。 LoggedVar[int]是该类的一种特殊化,在其构造函数中将int作为value参数。如果该类中还有T的其他用途,则T的值必须匹配。

第二个版本是具有泛型__init__方法的非泛型类。 T会根据您通过的value推论为不同的事物,但是无法像LoggedVar[int]那样声明类的特化,也无法声明是否使用了其他方法T ,这些将是单独的通用方法,不需要T匹配为__init__推导的内容。