[英]How to express hasattr() duck typing logic with structural pattern matching?
用於結構模式匹配的PEP 634將此功能記錄為class 模式:
cls()
將執行isinstance()測試。cls(attr=variable)
測試屬性是否存在並將值綁定到變量。_fields
,這是必須存在的屬性。_
,如果您確實想捕獲該值,請將其設置為其他變量名。您的具體示例, if hasattr(candidate, '_fields'): do_action()
,轉換為:
match candidate:
case object(_fields=_):
do_action()
這顯示了所有部分如何組合在一起:
from typing import NamedTuple
from dataclasses import dataclass
class Whale(NamedTuple):
name: str
num_fins: int
@dataclass
class Vehicle:
name: str
num_wheels: int
subject = Vehicle('bicycle', 2)
match subject:
case object(num_fins=n):
print(f'Found {n} fins')
case object(num_wheels=_):
print(f'Found wheeled object')
case _:
print('Unknown')
該腳本輸出:
Found wheeled object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.