# -*- coding: utf-8 -*-
"""
コンストラクタの宣言と利用（SCard）
"""


# 学生証のクラス
class SCard:
    # 全てのインスタンスで共有するデータは宣言直下に
    school_name = "駅前大学"  # 大学名

    """ 指示ここから """
    # このコメントブロックの下に，
    # int型引数を１つと，str型引数を１つ持つ
    # コンストラクタを宣言しなさい
    # 
    ### __init__(self, id, name)
    # id, name をそれぞれ同名の自身のインスタンス変数に代入
    # ただし，引数の初期値はそれぞれ以下のようにすること
    # id:   0
    # name: "匿名希望"
    
    def __init__(self, id=0, name="匿名希望"):
        self.id   = id
        self.name = name
    
    """ 指示ここまで """



def main():
    sc0 = SCard()

    # インスタンス変数の直接の書き換えを避けるためにも
    # コンストラクタを利用
    id   = int(input("学籍番号（下４桁）："))
    name = input("氏名：")
    sc1 = SCard(id, name)
    # こんな書き方もできなくはないが，入力ミスへの対応が弱い
    sc2 = SCard(int(input("学籍番号（下４桁）：")), input("氏名："))
    print()  # 採点の都合上の空行

    # クラス変数はクラス名を経由して呼び出す方が良い
    print(f"大学名は {SCard.school_name}")
    print(f"{sc0.school_name}, {sc0.id:04d}, {sc0.name}")
    print(f"{sc1.school_name}, {sc1.id:04d}, {sc1.name}")
    print(f"{sc2.school_name}, {sc2.id:04d}, {sc2.name}")

    sc1.school_name   = "仮面大学"  # うっかりインスタンス変数化
    SCard.school_name = "愛知大学"  # そのうえでクラス変数を更新
    print("ここから更新後")
    print(f"大学名は {SCard.school_name}")
    print(f"{sc0.school_name}, {sc0.id:04d}, {sc0.name}")
    print(f"{sc1.school_name}, {sc1.id:04d}, {sc1.name}")
    print(f"{sc2.school_name}, {sc2.id:04d}, {sc2.name}")
    # sc1.school_name の指すものがクラス変数ではなくなっている



if __name__ == "__main__":
    main()
