※この翻訳ドキュメントはスクリプトによって出力・同期されています。内容が怪しそうな場合はGitHubにissueを追加したり英語の原文の確認をお願いします。

Dictionary クラスのジェネリックの型アノテーション設定

このページではDictionaryクラスのキーと値のジェネリックの型アノテーション設定について説明します。

基本的な使い方

以下のコードのように、Dictionaryクラスではキーと値に対してジェネリックの型アノテーションを行うことができます:

import apysc as ap

ap.Stage()
dict_value: ap.Dictionary[str, int] = ap.Dictionary({"a": 10})
a_value: int = dict_value["a"]

これらのジェネリックの型アノテーションはmypyやPylanceなどのライブラリによるチェックや安全面で役に立つことがあります。

例えば、以下のコード例では辞書の値の型に対するPylanceがエラーが発生します:

import apysc as ap

ap.Stage()
dict_value: ap.Dictionary[str, int] = ap.Dictionary({"a": 10})
a_value: str = dict_value["a"]
Expression of type "int" cannot be assigned to declared type "str"
  "int" is incompatible with "str"

同じように、以下のコード例では辞書のキーの型でエラーが発生します(strが必要になっている一方でintが指定されています)。

import apysc as ap

ap.Stage()
dict_value: ap.Dictionary[str, int] = ap.Dictionary({"a": 10})
a_value: int = dict_value[10]

もし複数の型の指定が必要な場合、以下のコード例のようにUnionを使うこともできます。

特記事項: もしPython3.10以降をお使いの場合には|の記号などを代わりに使用することができます(もしくはAnyの型を指定するなど)。

from typing import Union

import apysc as ap

ap.Stage()

# Accepting the str and int key types.
dict_value: ap.Dictionary[Union[int, str], int] = ap.Dictionary({"a": 10, 2: 20})
a_value: int = dict_value["a"]
b_value: int = dict_value[2]
from typing import Any

import apysc as ap

ap.Stage()

# Accepting all types by specifying the Any type.
dict_value: ap.Dictionary[Any, Any] = ap.Dictionary({"a": 10, 2: "b"})
a_value: int = dict_value["a"]
b_value: str = dict_value[2]