型ヒント

Python 中級オブジェクト指向プログラミング

Jake Roach

Data Engineer

型ヒントなしのコード

class Student:
    def __init__(self, name, student_id, tuition_balance):
        self.name = name
        self.student_id = student_id
        self.tuition_balance = tuition_balance

# クラス作成は難しい場合がある
walker = Student("Sarah Walker", 319921, 15000)
  • student_id は整数でよいですか?
  • tuition_balance は float か整数ですか? 文字列の可能性は?
  • walker を作成後、後続のコードでその型をどう覚えておきますか?
Python 中級オブジェクト指向プログラミング

型ヒント

オブジェクト情報をコードに付与するための任意のツール

  • 読みやすく、トラブルシュートが容易
  • 企業レベルのPythonスキルを示す優れた方法
  • インタプリタは強制しない
  • 組み込み型キーワード、typing ライブラリ、独自クラス
# 変数作成時に型ヒントを追加
gpa: float = 3.92

# 関数/メソッド定義に型ヒントを追加 def check_grades(year: str) -> List[int]: ...
# 独自クラスも使える students: Dict[str, Student] = {...}
Python 中級オブジェクト指向プログラミング

組み込み型キーワードでの型ヒント

# 宣言的ロジックでの型ヒント
name: str = "Frost"  # 以前: name = "Frost"
student_id: int = 91031367
tuition_balance: float = 17452.78
# 関数/メソッド定義での型ヒント
def get_schedule(semester: str) -> dict:
    ...
  • 構文は variable: type を使用
  • 宣言的、関数/メソッドのシグネチャ
  • 返り値は def .... () -> type: で指定
Python 中級オブジェクト指向プログラミング

typing ライブラリ

typing は型ヒントのための追加ツールを提供するライブラリ

  • ListDictTuple
  • 最上位オブジェクトと要素の型を指定
from typing import List, Dict

student_names: List[str] = ["Morgan", "Chuck", "Anna"]
student_gpas: Dict[str, float] = {
    "Casey": 3.71,
    "Sarah": 4.0
}
  • AnySetIteratorCallable
Python 中級オブジェクト指向プログラミング

独自クラスでの型ヒント

class Student:
    def __init__(self, name: str, student_id: int, tuition_balance: float) -> None:
        self.name: str = name
        self.student_id: int = student_id
        self.tuition_balance: float = tuition_balance

    def get_course(self, course_id: str) -> Course:
        ...
        return course
# Student と Course を型ヒントに使用
walker: Student = Student("Sarah Walker", 319921, 15000)
data_science: Course = walker.get_course("TDM-20100")
Python 中級オブジェクト指向プログラミング

オブジェクト型の確認

# walker: Student = Student("Sarah Walker", 319921, 15000)
print(type(walker))
<class '__main__.Student'>
# data_science: Course = walker.get_course("TDM-20100")
print(type(data_science))
<class '__main__.Course'>
Python 中級オブジェクト指向プログラミング

Ayo berlatih!

Python 中級オブジェクト指向プログラミング

Preparing Video For Download...