为实现接口的类输入提示

时间:2017-03-22 21:45:57

标签: python python-3.x type-hinting

假设我有一个带有单个函数的接口A

class A(metaclass=ABCMeta):

    @abstractmethod
    def spam(self, x: int) -> str:
        pass

实现此接口的类BC,但不会直接初始化它们。我将有一些工厂方法(比如说)将返回给我一个实现A的合适对象。所以在这种情况下,当我在spamB中实现C时,我应该重复类型提示吗?实际上,由于未直接使用BC,因此A的类型提示似乎已足够。但我很好奇这种情况下的最佳做法;如果还有其他问题需要考虑。

1 个答案:

答案 0 :(得分:0)

据推测,既然你实现了B.spam,那么它将不是一个简单的实现(否则,为什么还要覆盖A.spam?)。所以你可能应该检查B.spam的正文。在这种情况下,您需要为参数提供类型提示并返回B.spam的值;否则,mypy会将这些类型视为Any

请注意,如果您确实提供了类型提示,mypy会检查B.spam的类型是否与使用rules for subclassingA.spam兼容,但仅 B来自A非虚拟;如果你只是A.register(B),mypy将完全忽略继承关系。这与运行时在虚拟基类中不会查找.spam的方式一致。