在不容易实例化类的情况下,我们如何使用Python的 struct 模式匹配(在Python 3.10中引入)来匹配变量的类型,而不调用构造函数/?
以下代码失败:
from pydantic import BaseModel
# instantiation requires 'name' to be defined
class Tree(BaseModel):
name: str
my_plant = Tree(name='oak')
match type(my_plant):
case Tree:
print('My plant is a tree.')
case _:
print('error')
错误消息为SyntaxError: name capture 'Tree' makes remaining patterns unreachable
另一种try 是在匹配期间重新创建实例(因为在匹配期间实例化很危险,但值得一试...)-它也失败了:
match type(my_plant):
case type(Tree()):
print('My plant is a tree.')
case _:
print('error')
TypeError: type() accepts 0 positional sub-patterns (1 given)
判断Tree()
的实例可以解决SyntaxError,但不会导致工作输出,因为它总是产生"error".我不想使用变通方法来匹配派生的bool
(例如,type(my_plant) == Tree)
)因为它会限制我只比较2个结果(True/False),而不是与多个类类型匹配.