在 python 3 中键入“接口(interface)”的正确方法是什么?
在以下示例中:
class One(object):
def foo(self) -> int:
return 42
class Two(object):
def foo(self) -> int:
return 142
def factory(a: str):
if a == "one":
return One()
return Two()
输入
factory
的返回值的正确方法是什么?功能?它应该类似于“具有一个名为
foo
的单一方法的类型,它不接受任何参数并返回一个整数”。但不确定我能找到如何做到这一点。
更新 : 这个问题是专属 打字。
最佳答案
您可以使用 typing.Union
但是,听起来你真的想要结构类型不是名义上的。 Python supports this using typing.Protocol
,这是 python 类型提示系统支持的部分,所以 mypy
会明白的,例如:
import typing
class Fooable(typing.Protocol):
def foo(self) -> int:
...
class One(object):
def foo(self) -> int:
return 42
class Two(object):
def foo(self) -> int:
return 142
def factory(a: str) -> Fooable:
if a == "one":
return One()
return Two()
x = factory('one')
x.foo()
请注意,结构类型非常适合 Python 的鸭式类型。 Python 的类型系统支持结构形式和名词形式。
关于python - 打字界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60330730/