我想写一个模式匹配块来检测被匹配的对象是type/class 对象,例如,int还是str. 不是这些的实例,而是实际的类对象 int或str.
这是一个SyntaxError:
x = int
match x:
case str:
print("x is str")
case int:
print("x is int")
怎么做?
更新,以下不起作用,但SyntaxError至少解决了:
x = int
match [x]:
case [str]:
print("x is str")
case [int]:
print("x is int")
(错误结果x is str:)
更新:问题是裸intorstr是一个捕获模式并记下一个值模式。名称intorstr将与裸case int:or绑定case str:。你必须使用点符号来使它不被捕获。
这有效:
import builtins
x = int
match x:
case builtins.str:
print("x is str")
case builtins.int:
print("x is int")
对于非内置,您必须执行以下操作:
import mymodule
x = mymodule.MyClass
match x:
case mymodule.MyClass:
print("x is MyClass")
case mymodule.MyOtherClass:
print("x is MyOtherClass")