• Xでシェア
  • LINEでシェア
  • このエントリーをはてなブックマークに追加

Python class(クラス)の使い方

この記事のポイント

  • class(クラス)の基本概念と定義方法
  • インスタンス変数とクラス変数の違い
  • メソッドの定義と呼び出し方法
  • 継承によるコード再利用の実現
  • Pythonにおけるclassの活用例と実践的な使い方

目次

Pythonにおけるclassとは?

Pythonにおけるclass(クラス文)は、オブジェクト指向プログラミングの中心的な概念です。

classとは、データと機能をひとまとめにする「設計図」のようなものです。classを使うと、関連するデータと操作をひとつの単位としてカプセル化し、コードの再利用性や可読性を高めることができます。

classから作成された個々のオブジェクトを、「インスタンス」と呼びます。

例えば、「動物」というclassがあれば、「イヌ」や「ネコ」はそのclassのインスタンスです。各インスタンスには、同じclassの特性(属性やメソッド)を共有しながらも、独自の状態(データ)を持つことができる特徴があります。

またclassの基本をおさえるうえで大切な概念に、「メソッド」があります。メソッドは、classが備える関数や処理のまとまりに名前をつけたものです。各classのデータに対する操作をメソッドのなかで実装します。

なかでもよく使われる特殊メソッドに、__init__があります。これはコンストラクタと呼ばれており、インスタンスが作成されるときに自動実行で初期化をするものです。

classの大きな利点は、複雑なプログラムを小さく管理しやすい部品に分割できることです。また、継承という仕組みを使うと、既存のclassの特性を引き継いで新しいclassを作ることも可能となります。継承することで、コードの再利用性がさらに高まりやすくなるでしょう。     

このように、classは、Pythonプログラミングに欠かせない重要概念です。大規模なプロジェクトやライブラリの開発において必須の知識となります。

【関連】
Pythonをもっと詳しく学ぶならpaizaラーニング

基本構文

Pythonにおけるclassの基本構文は、以下のとおりです。

class クラス名: # クラス変数の定義 def __init__(self, パラメータ1, パラメータ2, ...): # コンストラクタ:インスタンス変数の初期化 self.変数名1 = パラメータ1 def メソッド名(self, パラメータ1, ...): # メソッドの処理 return 結果

実際のコード例を見てみましょう:

class Animal: def __init__(self, name): self.name = name def speak(self): return f"{self.name}が鳴きました" dog = Animal("イヌ") print(dog.speak())

イヌが鳴きました

上記のコードでは、Animalというclassを定義したなかで、nameというインスタンス変数とspeakというメソッドを持たせています。dog変数にはAnimalclassのインスタンスを作成して代入し、そのインスタンスのメソッドを呼び出しています。

実用例

Pythonのclassは、さまざまな場面で活用できる概念です。     

Python初心者の方がclassなどの基本概念を身につけ、プログラミング力を高めていくためには、これから紹介するコード例を自分のプログラムに実装して動かしてみる経験が必要です。

コードを貼り付ける、アレンジする、エラーを見つけて対処する……という作業を繰り返すと、自分のプログラム内でclassなどを「どう使うべきか?」を考える思考力も鍛えられていくでしょう。

これから紹介するコードパターンにひと通り目を通したあとは、忘れないうちに実践に移ってみてください。

基本的なclassの作成

以下のコード例は、classの最もシンプルな使い方です。一般では、データのカプセル化と呼ばれています。関連するデータをひとつの単位にまとめることで、動物の基本情報を保持することが可能です。このテクニックは、オブジェクト指向の第一歩として必ず身につけるべきものでしょう。

class Animal: def __init__(self, name, species): self.name, self.species = name, species dog = Animal("ポチ", "イヌ") print(f"{dog.name}は{dog.species}です")

出力結果:

ポチはイヌです

メソッドの追加

classの真価は、データと操作を一緒に定義できる点にあります。以下のコード例では、動物クラスに鳴き声メソッドを追加しています。self引数を使って自分自身のデータにアクセスする方法を示したものです。selfは、インスタンス自身を示すものとなります。

class Animal: def __init__(self, name, sound): self.name, self.sound = name, sound def speak(self): return f"{self.name}が{self.sound}と鳴きました" print(Animal("イヌ", "ワン").speak())

出力結果:

イヌがワンと鳴きました

コンストラクタの活用

インスタンス作成時に初期設定をしたいときは、コンストラクタを使います。以下のコード例で行っているのは、デフォルト値や値の検証も含めた初期化です。オブジェクト生成時のデータ整合性を確保するための基本テクニックになります。

class Animal: def __init__(self, name, species="不明", age=0): self.name, self.species, self.age = name, species, max(0, age) def info(self): return f"{self.name}({self.species}) {self.age}歳" print(Animal("ポチ", "イヌ", 3).info())

ポチ(イヌ) 3歳

クラス変数とインスタンス変数

動物の総数を追跡するクラス変数を使うことで、共有される「クラス変数」と、各インスタンス固有の「インスタンス変数」の違いを示したコード例です。以下のパターンを理解すると、インスタンス間で情報共有する方法も実装しやすくなるでしょう。

class Animal: count = 0 def __init__(self, name): self.name = name; Animal.count += 1 def info(self): return f"{self.name}(全{Animal.count}匹中)" Animal("イヌ"), Animal("ネコ") print(Animal("ウサギ").info())

出力結果:

ウサギ(全3匹中)

継承の基本

以下のコード例は、親クラスの機能を再利用しながら拡張する方法(継承)を示したものです。継承を使うと、既存classの特性を引き継げます。このコードパターンでいえば、基本動物クラスを継承して犬クラスを作成できるでしょう。     

class Animal: def __init__(self, name): self.name = name def speak(self): return f"{self.name}が鳴きました" class Dog(Animal): def fetch(self): return f"{self.name}がボールを取ってきました" print(Dog("イヌ").speak())

出力結果:

イヌが鳴きました

メソッドのオーバーライド

継承したclassでは、親クラスのメソッドを再定義できます。以下のコード例は、同じインターフェースを保ちながら動作を変更する多態性の原則を示したものです。具体的には、動物の鳴き声メソッドを猫クラスで特殊化しています。

class Animal: def __init__(self, name): self.name = name def speak(self): return f"{self.name}が鳴きました" class Cat(Animal): def speak(self): return f"{self.name}がニャーと鳴きました" print(Cat("ネコ").speak())

出力結果:

ネコがニャーと鳴きました

特殊メソッド(マジックメソッド)

特殊メソッドをカスタマイズすると、クラスの動作を制御可能になります。これにより、classのインスタンスに、組み込み型のような自然に振る舞いが実現するでしょう。以下のコード例では、文字列表現と比較動作を定義しています。

class Animal: def __init__(self, name, species): self.name, self.species = name, species def __str__(self): return f"{self.species}の{self.name}" def __eq__(self, other): return self.species == other.species print(Animal("ポチ", "イヌ"), Animal("ポチ", "イヌ") == Animal("タロウ", "イヌ"))

出力結果:

イヌのポチ True

プロパティの活用

プロパティを使うと、メソッドを属性のように扱えます。プロパティの活用は、データの整合性を保ちながらシンプルなインターフェースを提供する高度なカプセル化技術です。以下のコード例では、年齢の取得・設定に制約を加えつつ、自然な構文でアクセスしています。

class Animal: def __init__(self, name): self.name = name; self._age = 0 @property def age(self): return self._age @age.setter def age(self, value): self._age = max(0, value) dog = Animal("イヌ"); dog.age = 3; print(f"{dog.name}は{dog.age}歳")

出力結果:

イヌは3歳

まとめ

Pythonのclassは、オブジェクト指向プログラミングを実現するための基本機能です。データと処理をまとめることで、コードの可読性と保守性を高めることができます。

classを活用することで、メソッドの定義、継承、特殊メソッド、プロパティなど、柔軟で拡張性の高い設計が可能になります。複雑なプログラムでもclassを活用すれば、構造的に整理され、バグの防止や拡張がしやすくなるでしょう。

適切に設計されたclassは、コードの見通しを良くし、バグの発生を減らし、拡張性を向上させます。大規模プロジェクトを効率よく確実に進めるためにも、classの適切な設計はとても重要でしょう。     

オブジェクト指向プログラミングの力や面白さを実感するうえでも、まずはシンプルなclass定義から始めて、段階的に応用へと進んでいくことをおすすめします

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. Pythonのリファレンス記事一覧
  4. Python class(クラス)の使い方