这两个代码有什么区别?
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的基类有何特别之处。有人可以向我解释吗?
谢谢。
答案 0 :(得分:2)
第一个版本是通用类。 LoggedVar[int]
是该类的一种特殊化,在其构造函数中将int
作为value
参数。如果该类中还有T
的其他用途,则T
的值必须匹配。
第二个版本是具有泛型__init__
方法的非泛型类。 T
会根据您通过的value
推论为不同的事物,但是无法像LoggedVar[int]
那样声明类的特化,也无法声明是否使用了其他方法T
,这些将是单独的通用方法,不需要T
匹配为__init__
推导的内容。