スポンサーリンク

【Python】クラスとオブジェクト

Python
スポンサーリンク

クラスやオブジェクトの概念がなかなか理解できず、なんとなくでやり過ごしていたのですが、最近になってようやく腑に落ちてきた気がします。

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では、親クラスのメソッドも、子クラスで新しく追加したメソッドも使えていることがわかる。

コメント