似たインスタンス変数やインスタンスメソッドをもつクラスがたくさん出てきたら、クラスを継承するときかもしれない。
class News: def __init__(self, title): self.title = title def get_title(self): print('今日のニュース: ' + self.title) class Blog: def __init__(self, title): self.title = title def get_title(self): print('今日のブログ: ' + self.title)
上のコードをすっきりまとめるには、News と Blog を抽象化した Page クラスを作るといいかもしれない。
class Page: def __init__(self, title): self.title = title class News(Page): def get_title(self): print('今日のニュース: ' + self.title) class Blog(Page): def get_title(self): print('今日のブログ: ' + self.title) news = News('今日の株式市場について') blog = Blog('ケーキをつくってみた') news.get_title() # 今日のニュース: 今日の株式市場について blog.get_title() # 今日のブログ: ケーキをつくってみた
News は子クラス、 Page は親クラスになります。子クラスは、カッコの中に親クラスを書く。
class News(Page):
これをクラスの継承という。子クラスは親クラスを引き継ぐため、子クラス News はインスタンス変数 title をもちます。
Python の dict でインスタンス変数を確認する
オブジェクトのインスタンス変数をチェックするには __dict__
を使う。継承したオブジェクトのインスタンス変数を確認してみよう。
class Page: def __init__(self, title): self.title = title class News(Page): def get_title(self): print('今日のニュース: ' + self.title) news = News('今日の株式市場について') print(news.__dict__) # {'title': '今日の株式市場について'}
辞書がきちんと返っている。子クラスのオブジェクトに親クラスのインスタンス変数が入っていることがわかる。