クラスの継承を試してみた

1月 25th, 2017

オブジェクト指向がなかなか便利なんじゃないかと思い始めた今日この頃。でも、やっぱり何やら分かりにくい。

でもって、今回は、後回しでいいや、と思っていた「継承」なるものについて…

継承だの親だの子だのと言われると「???」だったのだが、最近気がついた。「要するにこれって『差分プログラミング』なんじゃないかい?」

完全に正確ではないかもしれないが、おおむねあっている、と、思う。差分プログラミングというのは、大体、同じ内容をいくつも書くのは面倒だし、プログラムも長くなるから、「重なっているところは活用して、重ならないところだけプログラムを書く」ようにするとメンテもしやすいし楽で良い、というようなまあそんな話(だと思う)。

でだ。そう考えると話は早い。

親クラス:重なっている部分
子:重ならない独自の部分

親子関係を示すには、子クラスの後ろに親クラスを指定する。例えば、親を「Parent」、子を「Child」と名付けた場合、class Child (Parent):と書けば良い。

とっても単純なプログラムの例。

class Parent:
	def __init__ (self,x):
		self.x=x

class Child(Parent):
	def child_data(self,y):
		self.y=y

a=Parent(10) #aは親クラス所属。xの値を10に設定
b=Child(20) #bは子クラス所属。xの値を20に設定
b.child_data(30) #子クラス独自の関数を実行

print ('aのx=',a.x)
print ('bのx=',b.x)
print ('bのy=',b.y)

実行結果は
aのx=10
bのx=20
bのy=30

と出る。Childクラスでは、「x」について何も記述していない。が、b=Child(20)と書いた時に、Parentクラスのinitが実行されて、b.xに「20」が代入される。

ちょっとChildクラスを変更してこんな風にすると…

class Child(Parent):
	def child_data(self,y):
		self.y=y
		self.z=self.x+self.y
		print ('z=',self.z)

ちゃんと
z=50と表示される。

・・・初めに書いた時は何故かこれた上手く行かなかったのだが、今回は上手く行った。何が違っていたのか分からないorz。まあいいや、動いたんだから(こらこら)。

でも、本当は「object」とか「super」とかを使って書く方が良いらしい。ううん??

関連記事

  1. クラスの継承(superを使う)
  2. 他のクラスからインスタンス変数って使えるんだね
  3. オブジェクト指向と大格闘2(無理矢理使ってみる)
  4. classの中身は即実行されるらしい
  5. 同じclass内にあるメソッドを呼び出してみる
  6. リスト全ての要素の改行(’\n’)を削る
  7. pythonの「or」はちょっとくせ者っぽい
  8. printでの「,」と「+」

Comments are closed.