You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多继承场景下Python函数参数的类型注解方案问询

解决方案

针对你的问题,有两种实用的方案可以满足需求,避免代码重复且无需维护冗长的Union列表:

方案1:Python 3.10+ 原生交集类型

Python 3.10及以上版本支持交集类型语法A & D,直接用它作为类型注解即可,无需额外定义类或协议:

class A:
    def f(self): pass
class B(A): pass
class C(A): pass
class D:
    def g(self): pass
class E(B,D): pass
class F(C,D): pass

def h(obj: A & D): pass

类型检查器会自动识别obj需要同时是A和D的实例,新增符合条件的子类时无需修改注解。

方案2:兼容Python 3.8及以下版本的公共基类

如果需要兼容更早的Python版本,可以定义一个空的公共基类,让所有同时继承A和D的子类都继承它:

class A:
    def f(self): pass
class B(A): pass
class C(A): pass
class D:
    def g(self): pass

# 定义公共基类,继承A和D
class AandD(A, D):
    pass

# 修改子类继承结构,新增子类时只需继承AandD即可
class E(B, AandD): pass
class F(C, AandD): pass

def h(obj: AandD): pass

这个方案利用了Python的多继承特性,AandD自动继承了A和D的所有方法,无需重复定义。后续新增同时继承A和D的子类时,只需让它继承AandD,函数h的注解无需任何修改。

内容的提问来源于stack exchange,提问作者V T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 16:13:22