【发布时间】:2021-12-14 00:17:36
【问题描述】:
我有一个用例,我想在基类中定义一个通用函数,但要从子类中的重写属性注释返回类型。这是一个愚蠢的例子,但清楚地表明了我想做的事情:
from typing import Any
class BaseCls:
RETURNS_TYPE: Any = NotImplemented
# This is what I am not sure how to do, this does not work
# Have tried a few different things, but hoping someone just knows
def cast_to_return_type(self: 'BaseCls', value: Any) -> 'BaseCls.RETURNS_TYPE':
return some_work_that_returns_self_RETURNS_TYPE()
class IntCls(BaseCls):
RETURNS_TYPE = int
class StrCls(BaseCls):
RETURNS_TYPE = str
如何键入提示 cast_to_return_type 的返回值,以便常规旧 IDE 在执行 StrCls().cast_to_return_type(some_var) 时能够检测到返回类型应该是什么(在 pycharm 和 vscode 上尝试过,都不知道该怎么做决定Any 是返回类型,如果它不能推断出子类的值,这是有道理的)
【问题讨论】:
-
这可能对你有帮助,你检查过吗:stackoverflow.com/questions/61146406/…
-
您所说的“普通的旧 IDE”是什么意思?
-
我认为这违反了 LSP,使用泛型
标签: python type-hinting python-typing