python 泛型注释的不理解?
本人python
新手, 在翻阅pep484, 以及mypy文档的时候有遇到了一点不懂的地方, 如下:
# 文档实例如下:
from typing import TypeVar, Generic
T = TypeVar('T')
class Stack(Generic[T]):
def __init__(self) -> None:
# Create an empty list with items of type T
self.items: List[T] = []
def push(self, item: T) -> None:
self.items.append(item)
def pop(self) -> T:
return self.items.pop()
def empty(self) -> bool:
return not self.items
然后文档下面有这样一段话:
TheStack
class can be used to represent a stack of any type:Stack[int]
,Stack[Tuple[int, str]]
, etc
然后给出了一段实例用法:
# Construct an empty Stack[int] instance
stack = Stack[int]()
stack.push(2)
stack.pop()
stack.push('x') # Type error
我个人的理解是:
T
表示任意类型Stack[int]
表示Stack
只能存储int
类型, 所以下面传入了一个字符串就报错
疑惑是:
- 不知道上面的理解对不对
- 如果我在一开始就确定好堆里面的数据类型就行了为什么要创造一个泛型?
- 泛型在
python
中有没有什么使用场景, 本人没有接触过java
之类的语言, 因此觉得就看看例子感觉特别抽象, 也不知道在上面场景下如何使用.
本人刚刚接触python
, 若有理解错误的地方还请多多包涵, 望有前辈能够解惑!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
IntStack
/StrStack
。如果只是基本类型还好,麻烦的是以后我们还得要TupleIntStrStack
/TupleIntIntStrStrStack
/MyLittleClassStack
/MyLargeClassStack
,每个都得重新声明,太麻烦concurrent.futures.Future
。