【发布时间】:2021-11-05 19:54:40
【问题描述】:
我正在创建一个自定义容器,它在切片时返回一个自身的实例:
from typing import Union, List
class CustomContainer:
def __init__(self, values: List[int]):
self.values = values
def __getitem__(self, item: Union[int, slice]) -> Union[int, CustomContainer]:
if isinstance(item, slice):
return CustomContainer(self.values[item])
return self.values[item]
这可行,但有以下问题:
a = CustomContainer([1, 2])
b = a[0] # is always int, but recognized as both int and CustomContainer
c = a[:] # is always CustomContainer, but recognized as both int and CustomContainer
# Non-scalable solution: Forced type hint
d: int = a[0]
e: CustomContainer = a[:]
如果我将__getitem__ 的返回类型更改为仅int(我的原始方法),则a[0] 正确显示类型int,但a[:] 被视为list 而不是@987654329 @。
据我了解,python2中曾经有一个函数来定义切片的创建方式,但在python3中被删除了。
有没有一种方法可以提供正确的类型提示,而不必每次使用容器时都强制输入类型提示?
【问题讨论】:
标签: python python-3.x type-hinting python-typing