我想写一个模式匹配块来检测被匹配的对象是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
:)
更新:问题是裸int
orstr
是一个捕获模式并记下一个值模式。名称int
orstr
将与裸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")