answer11_2_1.py

class Ticket:
    """汎用のチケットを表すクラス。継承されることを想定している。

    属性:
        type(str):チケットのタイプ(「汎用」)。
        serial(int):チケットの通し番号。タイプごとに数える。
    """

    _TYPE = "汎用"
    issued = 0

    def __init__(self):
        self.type = self.__class__._TYPE
        self.__class__.issued += 1
        self.serial = self.__class__.issued

    def __str__(self):
        return f"{self.type}チケット #{self.serial}"


t1 = Ticket()
print(t1)
t2 = Ticket()
print(t2)
print(f"発行済チケット数は{Ticket.issued}枚です!")

# 章末問題 11章【2】(1)解答例
#
# クラス変数_TYPEへの代入は9行目で行っています。
# issuedの初期値は10行目で与えています。
# これらのコードはクラス定義のときに一度だけ実行されます。
#
# Ticketのインスタンスが生成されるときに__init__が呼び出され、
# そこでインスタンス変数typeと(13行目)serialが(15行目)設定されます。
# 設問にあるように、まずクラス変数issuedをインクリメントしてから(14行目)
# serialにインクリメント後の値を設定します(15行目)。