- 本日の学習
- Hook Functions
- 開始時、テスト収集時、テスト実行時などに様々なhookを設定可能
- Enum
- 各メンバーがインスタンスとなる。strやint, floatなどと多重継承することで、そのEnumインスタンス自体が対象の型(str)などとして認識される
- dataclass
- fronze=True , 設定した値は変更不可
class OrgRoleCode(str, Enum):
OWNER = "owner"
ADMIN = "admin"
DEVELOPER = "developer"
BILLING = "billing"
GENERAL = "general"
@dataclass(frozen=True)
class OrgRole:
code: OrgRoleCode
name: str
description: str
permissions: Set[str]
Annotatedの構文:
Annotated[型, メタデータ1, メタデータ2, ...]
FastAPIでの使い方:
# 第1引数: 実際の型(Member)
# 第2引数: FastAPIが使うメタデータ(Depends())
CurrentMember = Annotated[Member, Depends(get_current_member)]
その他の活用例:
# パスパラメータの制約
UserId = Annotated[int, Path(gt=0, description="User ID")]
# クエリパラメータ
PageSize = Annotated[int, Query(ge=1, le=100, default=10)]
# フォームデータ
Username = Annotated[str, Form(min_length=3)]
これにより、依存性注入だけでなく、バリデーションルールも型として再利用できるようになり、コードがより宣言的
で保守しやすくなります。