【发布时间】:2022-01-02 03:36:59
【问题描述】:
我有一个现有的类,它会在某个方法调用时更改一个重要的类型。它看起来像这样:
class RememberLast:
def __init__(self, last):
self._last = last
def set(self, new_last):
self._last = new_last
def get(self):
return self._last
remember = RememberLast(5)
type(remember.get()) # int
remember.set('wow')
type(remember.get()) # str
remember.set(4.5)
type(remember.get()) # float
理想情况下,remember 的类型将从RememberLast[int] 更改为RememberLast[str],然后更改为RememberLast[float]。有没有办法用类型提示来表示这种情况?
在set() 中返回带有不同类型提示的self 并不理想,因为已经存在调用者。对于这些不使用返回值的现有调用者,类型将保持为 RememberLast[int],即使类型已“销毁”并且不再正确。
我指的现有类是twisted.internet.defer.Deferred,它允许链接回调。最后一个返回值的类型成为下一个回调的参数。所以Deferred的类型可以认为是最后添加到它的回调的类型。
【问题讨论】:
-
如果你知道所有可能的类型,然后把它们放在一起。比如:def get(self) -> Union[int, str, float]:
-
类型提示用于 static 类型。如果您在运行时更改类型,则根据定义不是静态类型。
标签: python mypy python-typing