我有一个基类,在方法的返回上有一个类型提示float
在子类中,在不重新定义签名的情况下,我能否以某种方式将方法返回的类型提示更新为int
示例代码
#!/usr/bin/env python3.6
class SomeClass:
"""This class's some_method will return float."""
RET_TYPE = float
def some_method(self, some_input: str) -> float:
return self.RET_TYPE(some_input)
class SomeChildClass(SomeClass):
"""This class's some_method will return int."""
RET_TYPE = int
if __name__ == "__main__":
ret: int = SomeChildClass().some_method("42"). #
ret2: float = SomeChildClass().some_method("42")
我的IDE抱怨类型不匹配:
这是因为我的IDE仍在使用来自SomeClass.some_method
的类型提示
研究
我认为解决方法可能是使用泛型,但我不确定是否有更简单的方法
Python: how to override type hint on an instance attribute in a subclass?
建议可能使用instance variable annotations,但我不确定如何对返回类型执行该操作
好的,所以我能够把@AntonPomieshcheko和@KevinLanguasco的答案结合起来,提出一个解决方案,其中:
mypy
报告类型是否不匹配这正是我想要的行为。非常感谢大家:)
以下代码在PyCharm上运行良好。我添加了
complex
案例以使其更清楚我基本上将该方法提取到一个泛型类,然后将其用作每个子类的混入。请格外小心使用,因为它似乎不太标准
例如,如果将
ret2: float
更改为ret2: int
,它将正确显示类型错误不幸的是,mypy在这种情况下显示错误(版本0.770)
第一个错误可以通过书写“修复”
对于每个子类。现在,错误减少到
这与我们想要的正好相反,但如果你只关心PyCharm,那就没什么关系了
你可以用这样的东西:
但有一个问题。我不知道该怎么解决。对于SomeChildClass方法,某些方法IDE将显示通用提示。至少pycharm(我想你应该是这样)没有将其显示为错误
相关问题 更多 >
编程相关推荐