やっほー!国内のAI狂いだよ!✨
第24回へようこそ!前回は「たい焼きの型(クラス)」を作ったよね。
でも、もし「白いたい焼き」や「クロワッサンたい焼き」を作りたくなったら、またゼロから型を作り直すの?面倒くさいよね?
そんな時に使うのが「継承(Inheritance)」!
元の型の機能をコピーしつつ、新しい機能を追加したり改造したりできる、まさに「パワーアップ」のための仕組みなんだ!💪🐟
公式の「ここがわかりにくい」:派生クラス?基底クラス?
公式ドキュメントには、こんな専門用語が並んでいるよ。
派生クラス (derived class) の定義の構文は以下のようになります。
class DerivedClassName(BaseClassName): ...
うーん、言葉が硬い!(笑)
要するにこういう親子関係のことだよ👇
- 基底クラス (Base Class):親クラス。元になる設計図。(スーパークラスとも言う)
- 派生クラス (Derived Class):子クラス。親の能力を受け継いだ新しい設計図。(サブクラスとも言う)
Pythonでは「新しいクラス(親クラス)」と書くだけで、親の能力を全部コピーできちゃうんだ!
1. 継承のやり方:親の名前を書くだけ!
まずは、前回の「普通のたい焼き(Taiyaki)」クラスを親にして、「白いたい焼き(WhiteTaiyaki)」クラスを作ってみよう。
白いたい焼きも「あんこを入れる」とか「泳ぐ」機能は同じだから、継承を使えばコードを書く量を減らせるよ。
🐍 サンプルコードを見る(クリックで開閉)
# 親クラス(普通のたい焼き)
class Taiyaki:
def __init__(self, nakami):
self.nakami = nakami
def swim(self):
print(f"{self.nakami}たい焼きは泳いだ!")
# 子クラス(白いたい焼き)
# カッコの中に親クラス名を書く!
class WhiteTaiyaki(Taiyaki):
pass # とりあえず機能追加なし
# 白いたい焼きを焼く
white = WhiteTaiyaki("カスタード")
# 親譲りの機能が使える!
white.swim()
カスタードたい焼きは泳いだ!
すごい!WhiteTaiyaki の中には何も書いてないのに、ちゃんと swim メソッドが使えたね!
これが継承のパワーだよ✨
2. オーバーライド:親とは違う動きをする!
でも、白いたい焼きは「モチモチしてる」のが特徴だよね。
親と同じ泳ぎ方じゃつまらないから、swim メソッドを改造しよう!
これをオーバーライド(Override)と呼ぶよ。
🐍 改造コードを見る(クリックで開閉)
class WhiteTaiyaki(Taiyaki):
# 親と同じ名前のメソッドを定義すると上書きされる
def swim(self):
print(f"{self.nakami}の白いたい焼きは、モチモチ泳いだ!")
# 普通のたい焼き
normal = Taiyaki("あんこ")
normal.swim()
# 白いたい焼き
white = WhiteTaiyaki("カスタード")
white.swim()
あんこたい焼きは泳いだ!
カスタードの白いたい焼きは、モチモチ泳いだ!
子クラスでメソッドを定義し直すと、子クラスのインスタンスではそちらが優先して使われるんだね。
3. 【試験頻出】super():親の力も借りたい!
完全に上書きするんじゃなくて、「親の処理を実行した上で、追加の処理をしたい」って時もあるよね。
特に __init__(初期化)メソッドでよくあるパターンだよ。
そんな時は super() 関数を使って親クラスを呼び出すんだ。
🐍 タピオカ入りの生地にする(クリックで開閉)
class WhiteTaiyaki(Taiyaki):
def __init__(self, nakami, dough="タピオカ粉"):
# まず親の __init__ を呼んで、nakami を設定してもらう
super().__init__(nakami)
# その後で、自分独自の dough(生地)を設定
self.dough = dough
def info(self):
print(f"中身: {self.nakami}, 生地: {self.dough}")
white = WhiteTaiyaki("チョコ")
white.info()
中身: チョコ, 生地: タピオカ粉
super().__init__(...)これを書き忘れると、親クラスで設定している変数(
self.nakamiなど)が作られず、エラーになることがあるから注意してね!
4. isinstance と issubclass
「このオブジェクトは、たい焼きの一種かな?」って調べたい時は、便利な組み込み関数があるよ。
isinstance(obj, class):そのオブジェクトは、そのクラス(または子クラス)のインスタンスか?issubclass(classA, classB):AはBの子クラスか?
# 白いたい焼きは、Taiyakiの一種?
print(isinstance(white, Taiyaki))
# -> True (子クラスのインスタンスは、親クラスのインスタンスでもある!)
# Taiyakiは、WhiteTaiyakiの一種?
print(isinstance(normal, WhiteTaiyaki))
# -> False (親は子ではない)
試験に出る!要注意ポイント
今回の範囲で、Python 3 エンジニア認定基礎試験によく出るポイントをまとめたよ!📝
① 多重継承(Multiple Inheritance)
Pythonは、複数の親を持つことができるんだ(多重継承)。
class Child(Father, Mother): みたいにカンマで区切って書くよ。
もし親同士に同じ名前のメソッドがあったら、「左に書いた親」が優先されるというルール(MRO: Method Resolution Order)があるから覚えておいてね。
② 属性の検索順序
obj.x にアクセスした時、Pythonは以下の順で探すよ。
1. インスタンス自身
2. そのクラス
3. 親クラス(基底クラス)
どこにもなければ AttributeError になるよ。
super().__init__() を呼び忘れて、子クラスで親の変数を使おうとしたら「そんな変数ないよ!」って怒られたことがあるよ😭「親の初期化」は自動ではやってくれないから、子クラスで
__init__ を書くときは必ず super() を呼ぶ癖をつけよう!
理解度チェック!ミニクイズ
クラスの継承、理解できたかな?
試験レベルの問題でチェックしてみよう!🔍
親クラス Parent を継承した子クラス Child を定義する正しい構文は?
▼ クリックで正解を表示
Parent を継承した子クラス Child を定義する正しい構文は?class Child(Parent):
解説:
Pythonではクラス名の後ろのカッコ () の中に親クラス名を書くことで継承できるよ。
extends はJavaなどの言語で使われるキーワードだね。
子クラスから親クラスのメソッドを呼び出すために使う関数は?
▼ クリックで正解を表示
super()
解説:
super() を使うと、親クラス(スーパークラス)のメソッドにアクセスできるよ。
特に super().__init__() は必須テクニック!
親クラスのメソッドを子クラスで再定義することを何と言う?
▼ クリックで正解を表示
解説:
「上書きする」という意味でオーバーライドだよ。
オーバーロード(多重定義)は「引数の数や型が違う同名メソッドを定義する」ことで、Pythonでは標準ではサポートされていない概念なんだ。
まとめ:次回への引き
今回は「クラスの継承」について解説したよ!
たい焼きのバリエーションを増やすように、クラスを拡張していけるイメージがつかめたかな?✨
さて、次回はいよいよ最終回!…の前に、もう一つだけ大事なトピックがあるよ。
テーマは「変数の有効範囲!スコープと名前空間」だよ。
「関数の中で作った変数が、外から使えない!?」なんて経験ない?
変数がどこで生きて、どこで死ぬのか。そのルールを知れば、バグの原因がスッキリ分かるようになるよ!お楽しみに!👋✨
出典: Python公式チュートリアル
Copyright © 2001-2026 Python Software Foundation. Licensed under the PSF License.






