I would like to write a pattern matching block that detects whether the object being matched is the type/class object, for example, int or str. Not an instance of these, but the actual class object int or str.
This is a SyntaxError:
x = int
match x:
case str:
print("x is str")
case int:
print("x is int")
How to do it?
UPDATE, the following does NOT work, but the SyntaxError is at least solved:
x = int
match [x]:
case [str]:
print("x is str")
case [int]:
print("x is int")
(Incorrect result: x is str)
UPDATE: the problem is that the bare int or str is a capture pattern and note a value pattern. The name int or str would be BOUND with a naked case int: or case str:. You have to use something wit dot notation to make it not capture.
This works:
import builtins
x = int
match x:
case builtins.str:
print("x is str")
case builtins.int:
print("x is int")
For a non-builtin, you must do something like:
import mymodule
x = mymodule.MyClass
match x:
case mymodule.MyClass:
print("x is MyClass")
case mymodule.MyOtherClass:
print("x is MyOtherClass")