【发布时间】:2021-12-28 00:46:25
【问题描述】:
假设我有三个类A、B 和C、C 扩展B 和B 扩展A。
@dataclass
class A:
value: int
class B(A):
pass
class C(B):
pass
在引入 match 功能的 python 3.10 中,我考虑将 isinstance-elif 语句更改为 match-case 语句。但我找不到合适的语法...
到目前为止我已经尝试过什么......
match instance.__class__.__name__:
case A.__name__:
print('A')
case B.__name__:
print('B')
但是如果两个类有相同的__name__ 属性会怎样。在这里,即使是 C 实例也不会匹配任何情况。
下一个语法...这个更好
match instance:
case A():
print('A')
case B():
print('B')
这种语法效果很好,除了 B 实例将匹配第一种情况,因此我需要在我的 match-case 语句中对类进行拓扑排序。
附加问题:这是一种不需要参数的特殊语法吗?
问题:我还有哪些其他选择?
【问题讨论】:
标签: python python-3.10