6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Python : クラスの継承

Last updated at Posted at 2023-02-25

作成日: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を呼び出しているような気がして、ちょっと変な感じがする。初めて見た時とても混乱したので、備忘のためにメモ。


終わり

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?