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

如何在自定义类中使用match语句?如何触发各匹配分支?

问题:如何触发Point匹配代码的每个case分支

以下是原代码:

class Point:
    x: int
    y: int

def where_is(point):
    match point:
        case Point(x=0, y=0):
            print("Origin")
        case Point(x=0, y=y):
            print(f"Y={y}")
        case Point(x=x, y=0):
            print(f"X={x}")
        case Point():
            print("Somewhere else")
        case _:
            print("Not a point")

你之前的调用没触发对应分支,核心原因是传入的不是Point类的实例,而是元组或者类本身。下面是触发每个分支的正确调用方式:

  • 触发Origin分支:创建x和y都为0的Point实例

    where_is(Point(x=0, y=0))
    # 输出:Origin
    
  • 触发Y={y}分支:创建x为0、y不为0的Point实例

    where_is(Point(x=0, y=5))
    # 输出:Y=5
    
  • 触发X={x}分支:创建y为0、x不为0的Point实例

    where_is(Point(x=3, y=0))
    # 输出:X=3
    
  • 触发Somewhere else分支:创建x和y都不为0的Point实例

    where_is(Point(x=2, y=4))
    # 输出:Somewhere else
    
  • 触发Not a point分支:传入非Point类型的对象(比如元组、整数、类对象等)

    where_is((1, 0))  # 传入元组
    # 输出:Not a point
    
    where_is(Point)  # 传入类本身
    # 输出:Not a point
    

内容的提问来源于stack exchange,提问作者Yap Wei Cheng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:40:17