2

我想写一个模式匹配块来检测被匹配的对象是type/class 对象,例如,int还是str. 不是这些的实例,而是实际的类对象 intstr.

这是一个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")
4

0 回答 0