【Python】クラス(Class)の使い方を解説!サンプルコード付き!
クラス(class)と聞くと学校の「クラス」を思う人がいるのではないでしょうか?
その場合、クラスは「仕分けをする」というイメージになるかと思います。
しかし、プログラミングでのクラスはそのイメージとは少し異なります。
プログラミングでのクラスはたくさんのデータのまとまりを意味します。
classを使用することで、関数を定義するときみたいに複数の処理や値をまとめておくことが可能です。
今回はクラスの使い方についてサンプルコードを使って解説してきます。
よく使われるものなのでしっかり学習しましょう。
目次
クラス(class)とは
先ほども言いましたが、クラス(class)とはたくさんのデータのまとまりです。
classを使用すると、関数を定義するときのように複数の処理や値をまとめておくことができます。
そして、classには「インスタンス」というものが作成でき、インスタンスにはデータを保持させておくことができたり、関数のように処理をまとめておくことができたりします。
また、インスタンス化することでクラスの中のデータを取り出して使用することもできます。
classはどんなときに使われるのか
classは「オプジェクト」を作成し、対象物に関する情報や動きをまとめて使い回すことができます。
例えば、学校のクラスの生徒の情報を出力したいと思ったとします。
約30人の生徒の情報を記載して出力するのはとても面倒です。
そこで、studentというクラスを作成し、その中に名前、年齢、住所を出力できる型となるものを作成しておきます。そうすると、後はstudenクラスをインスタンス化し、必要なデータのみを入力すれば30人の生徒の情報を出力することができます。
このように、それぞれの共通部分をクラス化することでコードを書く手間が省けます。
また、コードも少なくて済み、コーディングがスマートになります。
そのため、何かしらの対象物を作成する必要があるならばクラスが使用できます。
クラスの書き方
1 2 3 |
class クラス名: 変数 = クラス名() |
classの後に名前をつけることでクその名前のクラスを作成することができます。
そして、変数にクラスを格納することでクラスの中にあるデータを使用することができます。
これをインスタンス化するといいます。
クラスを使ったサンプルコード
ここでクラスを使ったサンプルコードを見てみます。
例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Human: def __init__(self, name, old): self.name = name self.old = old def result(self): print("name", self.name, "old", self.old) tanaka = Human("田中", 25) suzuki = Human("鈴木", 26) tanaka.result() suzuki.result() |
出力結果
name 田中 old 25
name 鈴木 old 26
まず、「Human」というクラスを作成し、その中には nameとoldがあります。
この2つは人間の情報を出力する時に共通な項目となりますのでクラスの中に格納しています。
そして、インスタンス化することでその2つの情報を取り出しています。
クラス(class)の基本的な使い方
ここで、クラスの基本的な使い方を見ていきます。
クラスを作成する
まずはクラスを作成します。
例
1 2 3 4 5 6 7 8 9 |
class Dog: def __init__(self, name, size): self.name = name self.size = size def result(self): print(self.name, "の大きさ", self.size) prit("クラスが作成されました。") |
出力結果
クラスが作成されました。
このようにすることで、Dogというクラスが作成されます。
インスタンス化する
次に、先ほど作成したクラスをインスタンス化します。
例
1 2 3 4 5 6 7 8 9 10 |
class Dog: def __init__(self, name, size): self.name = name self.size = size toy = Dog("トイプードル", "小型犬") prit("Dogがインスタンス化されました。") akita = Dog("秋田犬", "大型犬") print("Dogがインスタンス化されました。") |
出力結果
Dogがインスタンス化されました。
Dogがインスタンス化されました。
このように書くと先ほど作成したクラスをインスタンス化できます。
コンストラクタ
コンストラクタとは、クラスをどのよう生成するか、クラスにどのようなデータを持たせるかなどといった情報を定義するのに必要なものです。
例
1 2 3 4 5 6 7 8 |
class Dog: def __init__(self, name, size): self.name = name self.size = size print("コンストラクタが作られました。") toy = Dog("トイプードル", "小型犬") akita = Dog("秋田犬", "大型犬") |
出力結果
コンストラクタが作られました。
コンストラクタが作られました。
コードで言うと「__init__」という名前の部分になり、インスタンス化によってコンストラクタの中身が取り出されています。
引数にselfというものがありますので注意しましょう。
selfとはクラス自身を指し、この引数は必須になります。
デストラクタ
デストラクタはクラスのインスタンスを削除するときに使うメソッドになります。「del」という名前でデストラクタを定義します。
例
1 2 3 4 5 6 7 8 9 10 |
class Dog: def __del__(self): print('デストラクタの呼び出します。') toy = Dog() print('インスタンスが生成されました。') akita = Dog() del akita print('インスタンスが破棄されました。') |
出力結果
インスタンスが生成されました。
デストラクタの呼び出します。
インスタンスが破棄されました。
デストラクタの呼び出します。
メソッドを呼び出す
メソッドとは処理の塊を言います。このクラスではこのような処理を行いたいという場合に使用します。
Pythonでメソッドを定義する場合は、”def”の後にメソッド名を指定します。
例1
1 2 3 4 5 6 7 8 9 10 |
class Dog: def bark(self): print("犬はワンワンと吠える") toy = Dog() toy.bark() akita = Dog() akita.bark() |
出力結果
犬はワンワンと吠える
犬はワンワンと吠える
インスタンス化することでbarkというメソッドが呼び出されました。
引数を使ってメソッドを呼び出すことも可能です。
例2
1 2 3 4 5 6 7 8 9 10 11 |
class Dog: def bark(self, name, word): print(name, "は", word, "と吠える") toy = Dog() toy.bark("トイプードル", "キャンキャン") bulldog = Dog() bulldog.bark("ブルドック", "ワンワン") |
出力結果
トイプードル は キャンキャン と吠える
ブルドック は ワンワン と吠える
引数を設定することでbarkメソッドが呼び出されました。
また、メソッドに返り値を設定することも可能です。
例3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class Dog: def bark(self, name, word): print(name, "は", word, "と吠える") dog_bark = "ヴァンヴァン" return dog_bark toy = Dog() toy_bark = toy.bark("トイプードル", "キャンキャン") toy2 = Dog() toy2.bark("トイプードル", toy_bark) bulldog = Dog() bulldog_bark = bulldog.bark("ブルドック", "ワンワン") bulldog2 = Dog() bulldog2.bark("トイプードル", bulldog_bark) |
出力結果
トイプードル は キャンキャン と吠える
トイプードル は ヴァンヴァン と吠える
ブルドック は ワンワン と吠える
トイプードル は ヴァンヴァン と吠える
メソッドに返り値を設定することでそのメソッドで取得した値を持ってくることができました。
クラスを継承
クラスを継承することで。、クラスに新しいメソッドを追加したり、親となったクラスのメソッドを使用したりすることができます。継承するには継承させたいクラスの後ろに()をつけて継承させたいクラス名を書きます。
例3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class Animal: def result(self): print("動物です。") class Dog(Animal): def bark(self, name, word): print(name, "は", word, "と吠える") dog_bark = "ヴァンヴァン" return dog_bark toy = Dog() toy.bark("トイプードル", "キャンキャン") toy.result() bulldog = Dog() bulldog.bark("ブルドック", "ワンワン") bulldog.result() |
出力結果
トイプードル は キャンキャン と吠える
動物です。
ブルドック は ワンワン と吠える
動物です。
クラスを継承することで、AnimalクラスにあるメソッドをDogクラスで使用することができました。
オーバーライド
オーバーライドすることで、親となったクラスのメソッドを子クラスで更新することができます。
オーバーライドするには親クラスのメソッドを子クラスに書いて、更新したい処理を書きます。
例3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
class Animal: def result(self): print("動物です。") class Dog(Animal): def bark(self, name, word): print(name, "は", word, "と吠える") dog_bark = "ヴァンヴァン" return dog_bark def result(self): print("Animalクラスのメソッドを更新") bear = Animal() bear.result() toy = Dog() toy.bark("トイプードル", "キャンキャン") toy.result() bulldog = Dog() bulldog.bark("ブルドック", "ワンワン") bulldog.result() |
出力結果
動物です。
トイプードル は キャンキャン と吠える
Animalクラスのメソッドを更新
ブルドック は ワンワン と吠える
Animalクラスのメソッドを更新
オーバーライドすることで、AnimalクラスにあるメソッドをDogクラスで更新することができました。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。