作成日:20230225
言語:Python
Pythonで、クラスを継承するやり方のメモ。
1. 参考リンク
2. クラスを継承するサンプルコード
class_inheritance.py
class BaseClass(): #基底クラス(親クラスとも)。継承元のクラス。
def __init__(self, x): #クラスが呼び出されると自動的に呼ばれる関数。
#この__init__()は初期化に必要で、ないとコードが動かない。「コンストラクタ」というらしい。
self.x = x
def base_method(self):
return self.x
class InheritedClass(BaseClass): #サブクラス(子クラス)。基底クラスであるBaseClassを引数にする。
def __init__(self, x, y):
super().__init__(x) #基底クラスのコンストラクタをオーバーライド。日本語で言うと、「基底クラスで定義した__init__を使い回しますよ」という命令。
# サブクラスで__init__を定義すると、基底クラスの__init__が上書きされてしまう。
# これを書かないと、基底クラスの__init__は未定義のままになってしまい、例外が発生する。
# 今回の場合、self.xが定義できなくなる。
self.y = y
# ※ ここで、base_methodはすでに基底クラスから継承されているので、ここで定義する必要がない。便利〜〜!
def additional_method(self):
return self.y
まとまったコードを、ほんの一部だけ仕様を変えて使い回したい時に便利ですね。
これ考えた人めっちゃ頭いいな! (そして、この感想を書いてる私はめっちゃ頭悪そうだな……)
3. メモ
super(InheritedClass, self).__init__(x)
という書き方も使われているらしい。明示的に「子」クラス名を記入する。意味は super() と同じ。
個人的には、Aという子クラスを定義する時に、Aの内部でAを呼び出しているような気がして、ちょっと変な感じがする。初めて見た時とても混乱したので、備忘のためにメモ。
終わり