如何在自定义类中使用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
相关产品推荐
相关产品推荐

