Python の型ヒント (型ヒント)

Python は動的言語であり、使用前に変数を宣言する必要がなく、あらゆるタイプのオブジェクトを指すことができます。Python は開発者に利便性をもたらす一方で、IDE やコード リーダーに混乱をもたらします。不明なケースでは、IDE は完了プロンプトや構文チェックを提供できません。


Python はバージョン 3.5 から「型ヒント」(PEP484) をサポートし、開発者が変数の型を宣言できるようにします。

型ヒントの最大の利点は、IDE が対応する型の補完ヒントを提供できることです。

  • 型ヒントはありません

VSCode はパラメータのタイプを認識できないため、完了プロンプトを表示できません

  • 型ヒントがある場合

VSCode は文字列型であることを認識しており、文字列のすべてのメソッドをリストできます。


型ヒントを使用する

型ヒントはヒントとしてのみ機能し、コードの実行には影響しません。変数の実際の型は型ヒントとは異なる場合があります。

型のヒントには、変数の型、関数のパラメータの型、戻り値の型が含まれます。

  1. 変数の型を宣言する
sep: str
sep = '-'
age: int = 35
ok: bool = True
pi: float = 3.14159

変数は、最初に型を宣言してから値を割り当てることも、型を宣言して同時に値を割り当てることもできます。

  1. 関数のパラメータと戻り値の型を宣言します。

Python インタープリターは関数の型ヒントを解析し、関数オブジェクトの __annotations__ 属性を更新します。

def get_name(f_name: str, l_name: str, sep: str = '-') -> str:
    name = f_name.title() + sep + l_name.title()
    return name


class Cat:

    def __init__(self, name):
        self.name = name

    def do(self, content: str) -> str:
        return f"{
      
      self.name} do {
      
      content}"


print("get_name type-hints:", get_name.__annotations__)
print("Cat.do type-hints:", Cat.do.__annotations__)

デフォルト値を持つパラメータの場合は、タイプヒントの後にデフォルト値を置きます。

出力:

get_name type-hints: {'f_name': <class 'str'>, 'l_name': <class 'str'>, 'sep': <class 'str'>, 'return': <class 'str'>}
Cat.do type-hints: {'content': <class 'str'>, 'return': <class 'str'>}

利用可能なタイプ

型自体を使用することに加えて、型ヒントでは型の文字列も使用できます。

def show(name: 'str', age: 'int') -> 'None':
    print("name:", name)
    print("age :", age)
コンテナの種類

基本タイプに加えて、コンテナタイプではサブ要素のタイプも指定できるため、サブ要素が使用される場合、IDE はコード補完も提供できます。

2023-04-02_15-38.png

from typing import Tuple


Vector2D = Tuple[int, int]


def show(line: list[int], dots: Vector2D, info: dict[str, str]):
    print('line:', line)
    print('dots:', dots)
    print('info:', info)


show([1], (2, 3), {
    
    'name': 'Hoss'})

コンテナ内の子要素のタイプを指定するには、次の 2 つの方法があります。

  1. 組み込みのコンテナタイプを直接使用する

list[int]たとえばdict[str, str]、 と は Python 3.9 以降でのみ利用可能です

  1. 標準ライブラリの助けを借りてtyping

たとえばTuple[int, int]、使用法は上記と同じですが、対応するタイプのエイリアスに置き換えるだけです。

もちろん、カスタム コンテナ タイプを変数に割り当てることもできます。これはタイプ ヒントに使用されます。

おすすめ

転載: blog.csdn.net/jiang_huixin/article/details/129914221