python - 在python中继承泛型的类的目的是什么?
问题描述
这两个代码有什么区别?
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 的基类有什么特别之处。谁能给我解释一下?
谢谢。
解决方案
第一个版本是一个泛型类。LoggedVar[int]
是类的一个特化,它在其构造函数中接受一个int
作为参数。value
如果T
该类中有任何其他用途,则该值T
必须匹配。
第二个版本是具有泛型__init__
方法的非泛型类。T
将根据value
您传递的内容推断出不同的内容,但是无法声明类的特化,例如LoggedVar[int]
,如果使用其他方法T
,则这些方法将是单独的泛型方法,不需要T
与推断出的任何内容相匹配__init__
。
推荐阅读
- javascript - 如何在单击时更改按钮文本
- reactjs - 输入 onChange 处理程序处理程序不起作用 - React Hooks
- python - 在python中选择特征
- html - 为什么我的主题文本(“学习初等数学”)被推到左边?
- azure - 无法登录 Azure:错误:通过 Terraform 计划从 Azure 元数据服务检索环境
- excel - Excel宏选择行和列的可变范围
- python-3.x - TypeError:float() 参数必须是字符串或数字,而不是“PolyCollection”
- asp.net-core - 如何从浏览器中清除 Blazor WebAssembly DLL?
- angular - 在不使用数据库的情况下以角度保存复选框数据
- apache-spark - 在 Spark SQL 中按日和月比较日期