Python {Article086}

ようこそ「Python」へ...

PyScriptでオブジェクト指向プログラミングを学習する: Python Object Oriented Programming【7】

この記事ではPythonでオブジェクト指向プログラミングを学習する方法を解説しています。 オブジェクト指向プログラミングは、次の13のシリーズから構成されています。 第7回目では、Employeeクラスのオブジェクトを作成して 関数「get_employee()」から戻り値としてクラスのオブジェクトを返す方法を学習します。 さらにEmployeeクラスに「__init__()」メソッドを追加する方法についても解説します。 また、「__init__()」メソッドの引数のエラーチェックを行う方法についても説明します。 ここでは引数が空白のとき「raise ValueError」を実行させます。

この記事ではMicrosoftのVisual Studio Codeを使用していますが、Jupyter NotebookなどのツールでもOKです。 ここで解説しているPythonのコードは「GO LIVE DEMO」から直接編集しながら会話形式で学習することができます。

説明文の左側に図の画像が表示されていますが縮小されています。 画像を拡大するにはマウスを画像上に移動してクリックします。 画像が拡大表示されます。拡大された画像を閉じるには右上の[X]をクリックします。 画像の任意の場所をクリックして閉じることもできます。
click image to zoom!
図A:
click image to zoom!
図B:
click image to zoom!
図C:
click image to zoom!
図D:


Employeeクラスの「__init__()」メソッドにエラーチェックを追加する

  1. Employeeクラスの「__init__()」メソッドに「raise ValueError」を追加する

    Visual Studio Code(VSC)を起動したら新規ファイルを作成して行1-30を入力(コピペ)します。 行2-9では「Employee」クラスを定義しています。 行3-9では「__init__()」メソッドを追加しています。 引数「self」は自分自身を意味します。つまり新規に生成されたEmployeeオブジェクトを指します。 引数「first」には従業員の名前を指定します。 引数「last」には従業員の姓名を指定します。 このメソッドはクラスのオブジェクトを生成したときに自動的に実行されます。 行4-5では引数「first」のエラーチェックを行っています。 引数の値が空白のときはraiseを実行させてエラーを発生させています。 行6-7では引数「last」の値が空白のときエラーを発生させています。

    行11-14では関数「get_employee()」を定義しています。 行12-13ではPythonのinput()ステートメントで従業員の名前と姓名をコンソールから入力させて変数に格納しています。 行14ではEmployeeクラスのオブジェクトを生成して戻り値として返しています。 Employee()クラスの引数には「first」と「last」を指定します。

    行16-23では関数「get_employee_try()」を定義しています。 行17-18ではPythonのinput()ステートメントで従業員の名前と姓名をコンソールから入力させて変数に格納しています。 行19-23では「try...except」を実行させています。 この場合、tryでエラーが発生したときはexceptが実行されます。 行20のEmpolyee()でクラスのオブジェクトを生成するときにエラーが発生すると行21-23のexcpetが実行されます。 行22ではエラーの詳細を表示しています。 行23ではデフォルトのEmployeeオブジェクトを生成して返しています。

    行25では関数「get_employee()」を呼び出して戻り値を変数に格納しています。 行27では戻り値が格納されている変数のデータ型を表示しています。 行30ではEmployeeクラスの属性(first+last)を表示しています。
    # Python Object-Oriented Programming [7].py
    class Employee:
        def __init__(self, first: str, last: str) -> None:
            if not first:
                raise ValueError('Missing first name')
            if not last:
                raise ValueError('Missing last name')            
            self.first = first
            self.last = last
    
    def get_employee() -> Employee:
        first = input('First name: ')     
        last = input('Last name: ')   
        return Employee(first, last) # return class 
    
    def get_employee_try() -> Employee:
        first = input('First name: ')     
        last = input('Last name: ')   
        try:
            return Employee(first, last) # return class 
        except ValueError as err:
            print(f"Employee(first, last) value error: {err}") 
            return Employee('First', 'Last')   
    
    employee = get_employee() # get class  
    # employee = get_employee_try() # get class  
    print(type(employee))
    # if employee.first == 'Akio':
    #     employee.last = 'Kasai'       
    print(f"Full Name: {employee.first} {employee.last}")

    click image to zoom!
    図1-1
    図1-1は実行結果です。 ここでは「First name」に「Akio」、「Last name」に「空白」を入力しています。 行15でEmployee()クラスを生成するとEmployeeクラスの__init__()メソッドが実行されます。 このとき行7-8のエラーチェックでエラーを検出してraiseが実行されています。


    click image to zoom!
    図1-2
    図1-2は実行結果です。 ここでは行26をコメントにして代わりに行27のコメントを外して「get_employee_try()」を実行させています。 「First name」には「Akio」、「Last name」には「空白」を入力しています。 行20-21のtryからEmployeeクラスのオブジェクトを生成するとEmployeeクラスの__init__()メソッドが実行されます。 行7-8の__init__()のエラーチェックでエラーを検出してraiseが実行されます。 そして行22-24のexceptが実行されます。 行23ではエラーの詳細を表示しています。


  2. Live DEMO

    【Live DEMO】からPythonのコードを実行するには緑色の[▶]をクリックします。 PyScriptの場合、input()ステートメントを実行するとポップアップが表示されるのでテキストボックスに入力します。 なお「input('Enter first name: ')」のように記述してもメッセージは表示されないのでここでは省力しています。 [▶]をクリックすると「First name」のポップアップが表示されるので「名前」を入力して[OK}をクリックします。 すると「Last name」のポップアップが表示されるので「姓名」を入力して[OK]をクリックします。 Pythonのコードは編集してから実行することもできます。

    click image to zoom!
    図2-1
    図2-1は緑色の[▶]をクリックしてPythonのコードを実行した画面です。 ここでは「First name」に「Akio」、「Last name」に「空白」を入力しています。 行17-18のtryからEmployeeクラスのオブジェクトを生成するとEmployeeクラスの__init__()メソッドが実行されます。 _init__()メソッドの行6-7でエラーを検出するとraiseを発行します。 そして行19-22のexceptが実行されます。 行21ではエラーの詳細を表示しています。 行22ではデフォルトのEmployeeクラスのオブジェクトを生成して返しています。

    処理の流れを理解するために「console.warn()」でトレース情報を表示しています。 ブラウザ(Chrome)から[F12]をクリックしてデバッグウィンドウを表示します。 次に[Console]タブを選択してConsoleウィンドウを開きます。 Consoleウィンドウには「get_employee_try()」▶「__init__('Akio','')」▶「except Value Error()」▶「__init__('First','Last')」の順にトレース情報が表示されています。


    click image to zoom!
    図2-2
    図2-2は図2-1の続きのトレース情報が表示されています。 ブラウザの右側に表示されているConsoleウィンドウのトレース情報をご覧ください。


Live DEMO