【Python】クラス(class)の使いどころ

【Python】クラス(class)の使いどころ

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

Pythonで業務自動化やデータ処理などのスクリプトを記述する場面は、実務など、様々な文脈で頻繁に発生するものです。処理を整理する手段でよく使われるのが「クラス化」で、データと処理をひとまとめにする構造を簡単に実現できます。

この記事では、Pythonにおけるクラスの適切な活用タイミングの基本的な考え方を解説していきます。関数ベースのコードが抱える限界や改善の手法など、サンプルコード付きで解説していきますので、ぜひ参考にしてください。



Pythonのクラスの適切な使いどころ

Pythonのclassは、状態を持ちながら複数のメソッドを呼び出す必要がある場面や同じ引数を複数の関数で共有する場面、データ構造として扱いたい場面に適しています。逆に、単発の処理を実行するだけであれば関数で十分なケースが多く、無理にクラス化する必要はありません。

代表的な使いどころは、以下の3つです。

  1. 同一のオブジェクトに対する処理をまとめる
  2. 引数が増加した関数を整理する
  3. dataclassでデータを保持する

これらは実務でクラス化が有効になりやすい代表的なパターンであり、それぞれの具体的な判断基準と実装例を順番に解説します。

同一のオブジェクトに対する処理をまとめる

Pythonの公式チュートリアルでは、クラスがプログラム上で果たす基本的な役割について、次のように説明しています。

クラスはデータと機能を組み合わせる方法を提供します。 新規にクラスを作成することで、新しいオブジェクトの 型 を作成し、その型を持つ新しい インスタンス が作れます。

出典:Python公式チュートリアル 9. クラス

この説明の通り、関連するデータとそれに対する操作をひとまとめにできるのがクラスの大きな特徴の一つです。インスタンスが状態やメソッドを持てる点が、単純な関数との大きな違いとなります。

同一のデータに対する複数の処理を実行する場合の実装例は、以下の通りです。

class User:
    def __init__(self, name):
        self.name = name

    def greet(self):
        print(f"Hello, {self.name}!")

user = User("Alice")
user.greet()

上記のコードでは、Userという型を作成し、名前データと挨拶の処理を一つにまとめています。単なる関数呼び出しの連続ではなく、状態を持ったオブジェクトとして振る舞う点が利点です。


Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

引数が増加した関数を整理する

関数ベースのスクリプト開発を進めると、引数の数が多すぎて保守性が低下する問題に直面しがちです。複数の関数で同じ引数を引き回すような状況は、クラスへの移行を検討する一つの目安となります。

複雑な設定値を属性として保持し、関数群を整理する手法の実装例は、以下の通りです。

class ConfigManager:
    def __init__(self, host, port, timeout):
        self.host = host
        self.port = port
        self.timeout = timeout

    def connect(self):
        print(f"Connecting to {self.host}:{self.port} (Timeout: {self.timeout}s)")

config = ConfigManager("localhost", 8080, 30)
config.connect()

上記のコードでは、初期化時に設定値を一度だけ渡し、各メソッド内でその値を参照する形で処理を整理しています。毎回引数を受け渡す手間を省略しつつ、関連する振る舞いを一箇所にまとめて管理しやすくなります。

dataclassでデータを保持する

複雑なロジックを伴わず、単にデータを格納するだけの用途であれば、標準ライブラリdataclasses@dataclassデコレータを活用するのが有効です。Python 3.7以降で利用可能で、手作業による記述の手間を省き、データ保持用の型を簡潔に定義できます。

ロジックが不要で純粋にデータを格納するだけの場面が、dataclassの典型的な使いどころとなる代表例です。シンプルなデータ構造を作成する手法の実装例は、以下の通りです。

from dataclasses import dataclass

@dataclass
class Product:
    id: int
    name: str
    price: int

item = Product(1, "Laptop", 120000)
print(item.name)

上記のコードでは、@dataclassデコレータを付与するだけで、デフォルト設定では__init__()(初期化処理)や__repr__()デバッグ用の文字列表現)、__eq__()(等値比較)といった特殊メソッドが自動的に生成されます。なお、repr=Falseeq=Falseを引数に渡すと、対応するメソッドの自動生成を無効化できます。

定型的なコードの記述を大幅に削減できるため、単純なデータ保持を目的とする場面では有力な選択肢となるアプローチです。

Pythonのclass設計のベストプラクティス

Pythonでクラスを設計する際は、保守性や再利用性を高めるための工夫が欠かせません。オブジェクト指向の基本原則を意識することによって、仕様変更に強いプログラムを構築しやすくなります。

代表的な設計の指針は、以下の通りです。

  • コンポジションを活用する
  • 単一責任の原則を適用する

コンポジションなどの手法を取り入れることによって、コードの可読性が向上します。それぞれの具体的な実装方法を順番に解説します。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

コンポジションを活用する

クラス設計において、一般的なオブジェクト指向設計の原則として、継承よりもコンポジションを優先するアプローチが多くの場面で推奨されています。コンポジションとは、あるクラスが別のクラスのインスタンスを属性として内部に保持する手法です。

継承による密結合(クラス間の依存度が高く変更の影響が広がりやすい状態)を避けられるのが大きな利点です。

コンポジションを用いた具体的な実装方法は、以下の通りです。

class Engine:
    def start(self):
        print("エンジンを始動します")

class Car:
    def __init__(self):
        self.engine = Engine()

    def drive(self):
        self.engine.start()
        print("車を走らせます")

my_car = Car()
my_car.drive()

上記のコードでは、CarクラスがEngineクラスを直接継承せず、内部属性として持たせています。必要な部品を内部に組み込むアプローチが、コンポジションという仕組みです。

継承による深い階層構造を避けることによって、仕様変更の影響範囲を限定的に保てます。結果として、独立性が高くテストしやすいコードとなるのが特徴です。

単一責任の原則を適用する

1つのクラスには、1つの役割だけを持たせるという考え方が単一責任の原則です。SOLID原則(オブジェクト指向設計の5つの基本原則)のひとつとして広く知られており、複数の機能を持たせすぎると、バグが発生しやすく保守も困難です。

役割ごとにクラスを明確に分割する例は、以下の通りです。

class DataFetcher:
    def fetch(self):
        return {"name": "sample", "value": 100}

class DataPrinter:
    def print_data(self, data):
        print(f"データ内容: {data['name']}, 値: {data['value']}")

fetcher = DataFetcher()
printer = DataPrinter()

data = fetcher.fetch()
printer.print_data(data)

上記のコードでは、データを取得する役割と出力する役割を別のクラスに切り分けています。各クラスの変更理由が1つに絞られるため、複数人での開発にも有効な手法です。

実務の現場でも、役割ごとに責任を切り分けることによってコードの見通しが向上します。単一責任を徹底することによって、修正や機能追加の影響範囲を小さく保てます。

Pythonのクラスの使いどころに関するよくある質問

小さなスクリプトでもクラス化すべきか?

既存のスクリプトをクラス化すべきかの判断基準として、グローバル変数が乱立し始めたタイミングや同じ引数を複数の関数で使い回す状況が目安となります。また、関数の数が5〜6本を超えて互いに関連している場合も、クラスへのリファクタリングを検討するタイミングです。

逆に、数行で完結する単発処理や状態の保持が不要なスクリプトであれば、関数のままで十分なケースが多くあります。

辞書やタプルとクラスはどう使い分けるべきか?

辞書(dict)やタプルは、データの一時的な格納や受け渡しに適しています。データに対する処理(メソッド)を持たせる必要がなく、構造がシンプルな場合は、辞書やタプルで十分なケースが多いです。

一方、同じデータに対して複数のメソッドを繰り返し呼び出す場合やデータの整合性を保ちながら管理したい場合はクラスが適しています。ロジックが不要な純粋なデータ保持が目的であれば、本文で解説したdataclassを活用することによって、辞書に近い手軽さでクラスの恩恵を受けられます。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 3.5日の研修で、年間1,600時間の削減効果が見込まれる。東京きらぼしフィナンシャルグループのDX人材育成事例 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する