Tob*_*eil 5 python polymorphism python-typing
考虑以下情况:
class Base:
...
class Sub(Base):
...
def get_base_instance(*args) -> Base:
...
def do_something_with_sub(instance: Sub):
...
Run Code Online (Sandbox Code Playgroud)
假设我get_base_instance在一个上下文中调用,我知道它会返回一个Sub实例 - 也许基于args我传递的内容。现在我想将返回的实例传递给do_something_with_sub:
sub_instance = get_base_instance(*args)
do_something_with_sub(sub_instance)
Run Code Online (Sandbox Code Playgroud)
问题是我的 IDE 抱怨将Base实例传递给仅接受实例的方法Sub。
我想我记得在其他编程语言中,我只是将返回的实例转换为Sub. 我该如何解决Python中的问题?根据返回类型有条件地抛出异常,或者有更好的方法吗?
我认为当你考虑选角时,你的思路是正确的。我们可以使用castfromtyping来阻止 IDE 抱怨。例如:
from typing import cast
class Base:
pass
class Sub(Base):
pass
def get_base_instance(*args) -> Base:
return Sub()
def do_something_with_sub(instance: Sub):
print(instance)
sub_instance = cast(Sub, get_base_instance())
do_something_with_sub(sub_instance)
Run Code Online (Sandbox Code Playgroud)