类型提示实现两个接口的对象

Zer*_*ero 7 python-3.x

有没有办法输入一个对象实现两个不同接口的提示?也许类似于my_function下面的假例子。

   class SomeLibraryClass(InterfaceA, InterfaceB):
       ...

   def my_function(obj: Multiple[InterfaceA, InterfaceB]):
      obj.do_interface_a_stuff()
      obj.do_interface_b_stuff()
Run Code Online (Sandbox Code Playgroud)

我无法修改SomeLibraryClass。我可以定义,class AB(InterfaceA, InterfaceB)但我使用的类型检查工具仍然会标记SomeLibraryClass为未实现AB。该解决方案还导致定义我们想要键入提示的所有接口组合的类的激增。(这可能是做事的“正确方法”,在这种情况下这就是答案!)

blu*_*eth 0

我仍然不认为这可以直接按照你想要的方式完成。但是使用协议,只要您知道要调用哪些方法,您就可以达到某种目的。

from typing import Protocol

class IABStuff(Protocol):
    def do_interface_a_stuff(self):
        pass

    def do_interface_b_stuff(self):
        pass


def my_function(obj: IABStuff):
      obj.do_interface_a_stuff()
      obj.do_interface_b_stuff()
Run Code Online (Sandbox Code Playgroud)