わかりやすいPythonのclassの使い方
- 作成日: 2021-05-24
- 更新日: 2023-12-24
- カテゴリ: Python
Pythonのclassの使い方
Pythonには複数の変数や関数をまとめることができるclass(クラス)という考え方があります。
class
を使うとオブジェクト指向的に変数と関数をセットで扱うことが可能になります。
この記事ではclass
について詳しく解説します。
結論から言うとclass
は↓のように書きます。
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def show_name(self):
print(self.name)
def show_age(self):
print(self.age)
animal = Animal('Pochi', 20)
animal.show_name()
# Pochi
animal.show_age()
# 20
class
について具体的に↓を見ていきます。
- クラスとは?
- クラスの作成
- クラスのメソッド
- クラスの初期化メソッド
- 変数とメソッドを定義したクラス
クラスとは?
そもそもクラスとはどういうものなんでしょうか?
クラスとは、変数と関数をまとめる箱みたいなものです。
箱の中に変数や関数を放り込んで、その箱を取りまわしてプログラミングをするわけです。
オブジェクト指向と言う考え方では、クラスを作ってプログラミングするというのが一般的です。
オブジェクト指向ではカプセル化とかポリモーフィズム、継承とかいろいろむずかしい概念があるんですが、ここではそれらは省略して解説します。
クラスというのはボールを生み出す箱です。
箱の中には変数や関数を入れます。そしてその箱からはボールを生み出せます。
このボールには箱の中の変数や関数のコピーが保存されています。
箱からは無数にボールを生み出すことができます。
生み出したボールの変数や関数にアクセスすることで、プログラミングをやりやすくします。
グローバル変数とグローバル関数との違いは、スコープがボールごとに限定されるという点です。
そのためボールの名前を変えれば変数や関数の名前は衝突しないし、ボールごとに個別の状態を持たせることができます。
クラスの作成
それでは箱となるクラスを作成します。
Pythonではクラスは↓のような記述で作成します。
class クラス名:
クラスの中身
class
というキーワードを書いてその横にクラス名を書きます。これは箱の名前のことです。
そしてコロンで改行してクラスの中身を書きます。ここには変数や関数を書きます。
Animal
という空のクラスを作ってみます。
その場合は↓のようなコードになります。
class Animal:
pass
クラスの中身を空にする場合は↑のようにpass
を書きます。
これで空のクラスの作成が完了しました。
あとはこのクラス(箱)からボールを生成してみましょう。
ボールを生成するには↓のようにします。
ボール名 = クラス名()
コードにすると↓のようになります。
animal = Animal()
↑のanimal
というのがボールです。
このボールのことをPythonではオブジェクトまたはインスタンスと呼びます。
このボールはもう使うことができます。
↓のようにprint()
で出力してみると↓のような出力になります。
print(animal)
# <__main__.Animal object at 0x1234>
このボールは空の箱から作りましたので、中身は空っぽです(厳密に言うと空っぽじゃないんですが)。
では箱に変数や関数を入れてみたいと思います。
クラスのメソッド
クラスに入れられる関数のことをメソッドと呼びます。
これは普通の関数とメソッドを区別するためにこう呼ばれています。
クラスのメソッドは↓のように書きます。
def メソッド名(self):
メソッドの中身
基本的にはメソッドは関数と同じふうに書きます。
メソッド名は関数名です。
1つ関数と違うのは、クラスのメソッドには第1引数に必ずself
という引数が渡されることです。
このself
はクラスのオブジェクト、つまりボールを指します。
ではクラスと一緒にメソッドを書いてみます。
コードでは↓のようになります。
class Animal:
def show_name(self):
print('Pochi')
↑のshow_name()
というメソッドは名前を表示するメソッドです。
これを呼び出すと画面に「Pochi
」と出力されます。
ではこのクラス(箱)をオブジェクト(ボール)にしてみます。
そしてオブジェクトから先ほどのメソッドを呼び出します。
animal = Animal()
animal.show_name()
# Pochi
無事にanimal
というオブジェクトからshow_name()
というメソッドを呼ぶことができました。
クラスには無数にメソッドを定義できます。
クラスの初期化メソッド
クラスのメソッドにはあらかじめ予約されている特別なメソッドがいくつかあります。
__init__()
はその中のメソッドの1つです。
__init__()
はクラスからオブジェクトが作成され、オブジェクトが初期化される時に呼ばれます。
この__init__()
の中でオブジェクトに変数などを初期化することが可能です。
__init__()
は↓のように書きます。
def __init__(self):
初期化内容
コードにすると例えば↓のようになります。
class Animal:
def __init__(self):
self.name = 'Pochi'
↑のコードでは__init__()
の中でself
に対してname
という変数を初期化しています。
self
はオブジェクトを指すので、name
という変数はオブジェクトに対して設定されます。
この状態のクラスからオブジェクトを作成してみます。
animal = Animal()
print(animal.name)
# Pochi
↑のようにanimal.name
でname
変数にアクセスすることができます。
このときname
のことをオブジェクト変数またはインスタンス変数と言います。
__init__()
には引数を指定することができます。
たとえばname
という引数を作ります。
class Animal:
def __init__(self, name):
self.name = name
そのname
という引数を↑のようにname
というオブジェクト変数に代入します。
__init__()
のname
引数にはどのように値を指定するのかと言うと、これはクラスからオブジェクトを生成するときに指定します。
animal = Animal('Pochi')
print(animal.name)
# Pochi
↑のようにAnimal('Pochi')
と書くことで__init__()
のname
引数にPochi
という文字列を渡すことができます。
このようにクラスのオブジェクトの変数は外部から注入することができます。
変数とメソッドを定義したクラス
では最後になりますが、クラスにメソッドと変数を定義してみます。
↓のようなコードを書きます。
class Animal:
def __init__(self, name, age):
self.name = name # 名前
self.age = age # 年齢
def show_name(self):
print(self.name)
def show_age(self):
print(self.age)
↑のクラスはshow_name()
とshow_age()
というメソッドを持ち、さらにname
とage
というオブジェクト変数を持ちます。
↑のクラスをオブジェクトにして各メソッドを呼び出します。
animal = Animal('Pochi', 20)
animal.show_name()
# Pochi
animal.show_age()
# 20
↑のようにshow_name()
ではPochi
が、show_age()
では20
が出力されています。
おわりに
クラスの概念はわかりづらいものですが、箱からボールを生成するものだと考えれば非常にシンプルなものだとわかります。
継承やカプセル化、ポリモーフィズムなどについてはこの記事に書いてあることがわかるようになってからでOKです。そうでないと混乱すると思います。
🦝 < クラスというひな型からオブジェクトを生み出していく
🐭 < 量産体制準備完了