实现接口的类的类型提示

Jay*_*hik 6 python type-hinting python-3.x

假设我有一个A具有单一功能的接口。

class A(metaclass=ABCMeta):

    @abstractmethod
    def spam(self, x: int) -> str:
        pass
Run Code Online (Sandbox Code Playgroud)

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

max*_*max 1

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

请注意,如果您确实提供类型提示,mypy 将检查 的类型是否与使用其子类化规则B.spam兼容,但前提是派生自非虚拟;如果你只是这样做,mypy将完全忽略继承关系。这与运行时不会在虚拟基类中查找的方式一致。A.spamBAA.register(B).spam