クラスやオブジェクトの概念がなかなか理解できず、なんとなくでやり過ごしていたのですが、最近になってようやく腑に落ちてきた気がします。
pythonではオブジェクト指向の理解は欠かせないようです。
クラスとオブジェクト
クラスとは、型のこと
クラスとは、実体を作成するための型のことで、よく設計図に例えられる。
クラスから作成されたものはインスタンス。クラスからインスタントを作成することをインスタンス化という。
言葉で説明しても分かりにくいので、図にしてみる。

ペットショップで犬の紹介パネルを作成する場合。
まずはパネルの型があり、そこに個別の値を記載して個体ごとのパネルを作成する。
パネルに記載する項目は、型に定義してあるので、各項目を埋めていくだけでパネルが作成できる。
これがクラスからインスタンスを作成するイメージ。
すべてがオブジェクト
オブジェクト(Object)とは”モノ”のこと。クラスもクラスから作成した、インスタンスもオブジェクト。
Pythonでは、クラスも関数もすべてがオブジェクトという考え方。
クラスの基本構文
クラスには関わりのあるデータやメソッド(関数)をまとめて書く。
クラスを作成
Personというクラスを作成。
クラスの中には、コンストラクタを定義する。
# クラス宣言
class Person:
# メソッド
def __init__(self, name, age):
self.name = name
self.age = age
クラス内には、クラスの機能となるメソッドを定義。
メソッドで使われている__init__はコンストラクタといって、情報を定義するために必要。initialize(初期化)の意。
メソッドの第一引数はself
とすること。これはインスタンス自身のことを指す。
self.プロパティ
で、クラスが持つプロパティにアクセスできる。
クラスを呼び出す
クラスを作成したら、インスタンス化して、クラスを呼び出す。クラスはあくまで設計図なのでインスタンス化しなければ、プログラム上で使うことはできない。
下記だと、インスタンス化して作成したインスタンスが、p1やp2。それぞれが、self
にあたる。
p1 = Person("John", 36)
print(p1.name)
print(p1.age)
p2 = Person("Tom", 28)
print(p2.name)
print(p2.age)
結果
John
36
Tom
28
一つのクラスから何個でもインスタンスを作成することができる。
クラスの継承
クラスは継承(inherit)できる。
既にあるクラスの定義を継承できるので、類似クラスや、下位クラスを作成する場合に便利。
ここでは親クラスとなる犬クラスを継承して、my犬クラスを作成。
まずは犬クラス
# 親クラス
class Dog:
def __init__(self, breed):
self.breed = breed
def say_breed(self):
print("犬種は{}です。".format(self.breed))
この犬クラスを継承してmy犬クラスを作成
クラスを継承するには、クラス宣言時の引数に継承するクラス名を明記するだけ。
# 子クラス
class myDog(Dog):
# 継承したメソッドを上書き
def __init__(self, breed, fav_food):
self.breed = breed
self.fav_food = fav_food
# 新しいメソッドを追加
def comment(self):
print("好物は{}です。".format(self.fav_food))
インスタンス化して呼び出す
dog = Dog('柴犬')
dog.say_breed()
mydog = myDog("チワワ", "りんご")
mydog.say_breed()
mydog.comment()
結果
犬種は柴犬です。
犬種はチワワです。
好物はりんごです。
子クラスから作成したインスタンスmydog
では、親クラスのメソッドも、子クラスで新しく追加したメソッドも使えていることがわかる。
コメント