【23日目】オブジェクト指向プログラミング⑦コンポジションな関係を作る
こんばんは、なぺです。
前回までで、オブジェクト指向プログラミングの4大要素を学びました。
今回は、もうひとつ重要なコンセプト、コンポジションについて学びます。
さて、
コンポジション?
本にはこう書いてあります。
コンポジション:別クラスのオブジェクトを変数として持たせること。「has-a関係」
ふむふむ
変数にオブジェクトを入れることができるのね!
ちょっとやってみます。
前回作った親子クラスのコードを使って、子のインスタンス変数に親を入れます。
class Parent: def __init__(self,n,o): self.name = n self.old = o class Child: def __init__(self,n,p): self.name = n self.parent = p takeko = Parent('takeko',50) umeko = Child('hanako',takeko) #Childクラスの変数にParentクラスのオブジェクトを入れる print(umeko.parent.name) #出力結果 takeko
Childクラスのオブジェクト(umeko)の親としてParentクラスのオブジェクト(takeko)を入れました。
よしよし。
次は前回の継承とコンポジションの合わせ技!
class Parent: def __init__(self,n,o,p): self.name = n self.old = o self.parent = p class Child(Parent): #継承 pass takeko = Parent('takeko',50,'matsuko') umeko = Child('hanako',15,takeko) #コンポジション print(takeko.parent) print(umeko.parent) print(umeko.parent.name) #出力結果 matsuko #takekoのparentは文字列で入力したので、そのまま出力される。 <__main__.Parent object at 0x000001C80A322688> #umekoのparentはオブジェクトを渡したので、.parentだけだとメモリ上の場所が表示されてしまう。 takeko #parent.nameと指定したので、takekoオブジェクトのname変数が表示された。
できたっぽい。
継承もコンポジションも、コードを少なくできるのはいいですね。(多分)
今日は以上です!
まだまだ続くよオブジェクト指向!
参考書はこちらです
「独学プログラマー」
独学プログラマー Python言語の基本から仕事のやり方まで
- 作者:コーリー・アルソフ
- 発売日: 2018/02/24
- メディア: 単行本
それではまた^^