クラスは、オブジェクト指向プログラミング(OOP)の基本的な概念の一つです。OOPでは、プログラムを構成する要素を「オブジェクト」として考えます。オブジェクトとは、ある種のデータとそれに関連する処理をカプセル化したもので、他のオブジェクトと相互作用することができます。
classを利用するメリット
クラスを使うことで、次のようなメリットがあります。
コードの再利用性が高まる
クラスを使うことで、機能をひとまとめにしたものを定義することができます。そのため、同じ機能を複数の場所で使いたい場合、クラスを再利用することができます。また、クラスを継承して新しいクラスを作成することもできます。
コードの保守性が向上する
クラスを使うことで、コードの構造が明確になり、読みやすくなります。また、機能ごとにクラスを分けておくことで、コードの変更が必要な場合でも、変更箇所が明確になり、保守性が向上します。
オブジェクト指向プログラミングのメリットが得られる
クラスを使うことで、オブジェクト指向プログラミングの機能を活用することができます。オブジェクト指向プログラミングは、コードを柔軟に扱うことができ、開発の効率化につながります。
以上が、クラスを使うメリットです。クラスを使うことで、コードの再利用性や保守性を向上させ、オブジェクト指向プログラミングのメリットを得ることができます。
classの基本的な使い方
Pythonでは、クラスは以下のように定義します。
class MyClass:
# クラスの定義
ここでは、class
キーワードを用いてクラスを定義しています。クラス名はMyClass
としていますが、自由に変更することができます。
次に、クラスには「メソッド」と呼ばれる関数を定義することができます。メソッドは、クラス内で定義された関数であり、そのクラスのオブジェクトに対して操作を行うために用いられます。
class MyClass:
def my_function(self):
print("Hello, world!")
この例では、”MyClass”というクラスを定義し、”my_function”というメソッドを持っています。メソッドの第一引数には、常に”self”を指定します。この”self”は、クラス自身を指す特別な引数です。
クラスのインスタンスを作成するには、以下のようにします。
my_object = MyClass()
これで、”MyClass”のインスタンスである”my_object”を作成することができました。”my_object”から”my_function”を呼び出すには、以下のようにします。
my_object.my_function()
__init__メソッドの使い方
__init__メソッドは、クラスがインスタンス化されたときに自動的に呼び出される特別なメソッドです。このメソッドを使うことで、インスタンスを初期化することができます。
class MyClass:
def __init__(self, my_param):
self.my_attribute = my_param
def my_function(self):
print("Hello, {}!".format(self.my_attribute))
my_object = MyClass("world")
my_object.my_function()
この例では、”MyClass”に”init“メソッドを追加しています。”init“メソッドには、”my_param”というパラメータを渡し、これを”self.my_attribute”に代入しています。そして、”my_function”の中で、”self.my_attribute”を使って”Hello, world!”というメッセージを表示しています。
classを使ってみる
以下に、クラスとメソッドの例を示します。
class Dog:
def __init__(self, name, breed):
self.name = name
self.breed = breed
def bark(self):
print("ワンワン!")
my_dog = Dog("ポチ", "柴犬")
print(my_dog.name) # "ポチ"が出力される
print(my_dog.breed) # "柴犬"が出力される
my_dog.bark() # "ワンワン!"が出力される
この例では、Dog
というクラスを定義しています。このクラスには、__init__
メソッドとbark
メソッドがあります。
__init__
メソッドは、オブジェクトを初期化するためのメソッドです。このメソッドは、オブジェクトが作成された直後に呼び出され、引数としてself
以外の値を受け取ることができます。この例では、name
とbreed
という2つの引数を受け取り、それらの値をオブジェクトの属性として設定しています。self.name
とself.breed
は、それぞれオブジェクトのname
とbreed
という属性を表しています。
bark
メソッドは、犬が吠える音を出力するためのメソッドです。このメソッドは、オブジェクトのbark
メソッドを呼び出すことで実行されます。my_dog.bark()
のように、オブジェクトの属性にアクセスするためには、.
を用いて呼び出します。
最後に、my_dog
という名前のDog
オブジェクトを作成し、name
とbreed
の属性が正しく設定されていることを確認し、bark
メソッドを呼び出して犬が吠える音を出力しています。
クラスとメソッドを使うことで、同じ種類のオブジェクトを複数作成することができます。また、オブジェクトの属性やメソッドを変更することで、異なる状態のオブジェクトを作成することもできます。
classを入れ子(ネスト)で使用する方法
クラスを入れ子にすることで、複雑な構造を簡単に表現することができます。
1ファイル内で入れ子(ネスト)する場合
class OuterClass:
def __init__(self):
self.inner = self.InnerClass()
class InnerClass:
def my_function(self):
print("Hello, world!")
my_object = OuterClass()
my_object.inner.my_function()
この例では、”OuterClass”に”InnerClass”というクラスを定義しています。そして、”OuterClass”のインスタンスを作成するときに、”InnerClass”のインスタンスも作成して、”self.inner”に代入しています。
“InnerClass”には”my_function”というメソッドが定義されています。”my_function”は、”Hello, world!”というメッセージを表示するだけのシンプルなものです。
最後に、”my_object”の”inner”属性から”my_function”を呼び出しています。これで、”Hello, world!”というメッセージが表示されます。
入れ子(ネスト)するクラスを別ファイルにする場合
入れ子の内側のクラスを別ファイルにする場合は、以下のようにします。
from inner_class import InnerClass
class OuterClass:
def __init__(self):
self.inner = InnerClass()
def my_function(self):
print("Hello, world!")
class InnerClass:
def my_function(self):
print("Hello, world!")
outer_class.py
では、InnerClass
をインポートして使っています。inner_class.py
では、InnerClass
を定義しています。
まとめ
Pythonのクラスは、オブジェクト指向プログラミングにおける基本的な概念の一つであり、データとそのデータに対する操作をまとめた設計図のようなものです。class
キーワードを使用して定義され、属性とメソッドを持ちます。属性は、クラスのインスタンスごとに異なる値を持つ変数のことであり、メソッドは、クラスのインスタンスに対する操作を定義した関数のことです。クラスを使うことで、同じ設計のオブジェクトを複数生成することができます。また、継承を使って既存のクラスの機能を引き継ぎ、新しいクラスを定義することができます。Pythonのクラスを使うことで、プログラムをより簡潔で再利用性の高いものにすることができます。
クラス継承については別記事に記載しているので、よかったら見てみて下さい。