Python键入多重继承作为参数



我想显式键入一个函数参数,它需要从两个类继承。示例:

class SomeInterface:
def first_function():
pass
class SuperClass:
def other_function():
# implementation here
# more function definitions
class C(A, B):
# overrides first_function
def my_typed_function(param: Union[A,B]):
param.first_function() # mypy: variant B does not have that function
param.other_function() # mypy: variant A does not have that function

我可以用什么代替Union来显示这种关系?(请记住,也可以有其他类似C的实现传递给它,所以我不能显式使用C(

我还研究了键入协议,并将A定义为协议,但遇到了同样的问题,因为B是一个实际的类,不能组合到协议中。

我通过定义一个中间抽象类来解决它:

class MyMixedType(A,B):
pass
class C(MyMixedType):
# very specific implementation
def my_typed_function(param: MyMixedType):
...

BUT这只是因为我可以让所有类实现MyMixedType,从而将多重继承卸载到上面的一个级别。

相关:如何验证一个类型是否有多个超类(感谢@khelwood(
在研究了这个问题和许多相关的github问题后,这似乎是自2018年以来一直存在的问题。一个解决方案称为Intersection,但据我所知,它尚未实现。PyCharm/IntelliJ似乎通过编辑器内的类型检查来支持它。

相关内容

  • 没有找到相关文章

最新更新