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行目)。