报告 Python 类模式和 __match_args__ 定义中结构模式匹配使用不正确或不明确的情况。
该检查可以帮助您发现以下问题:
__match_args__ 的类使用位置模式。__match_args__ 公开的实参数量。__match_args__ 类型无效(必须为 tuple[str, ...])。对于某些具有内置类的简单 as 模式,该检查还会建议用于简化模式的快速修复。
# 位置模式过多
match p:
case Point(x, y, z): # 根据 __match_args__,预期仅为 2 个
……
# 位置 + 关键字冲突
match p:
case Point(x, y, x=0): # 'x' 已通过位置指定
……
# 类没有 __match_args__,但使用了位置模式
class C:
def __init__(self, a, b):
self.a = a; self.b = b
match obj:
case C(1, 2): # C 不支持位置模式
……
# 无效的 __match_args__ 声明
class D:
__match_args__ = ["a", 42] # 必须为 tuple[str, ...]
该检查会在可能的情况下提供快速修复,例如添加 __match_args__,移除冗余模式,或简化涉及内置类的某些 as 模式。