検索

キーワード


目次

Pythonにおけるクラスとインスタンス【初心者向け解説記事】

  • 公開日:2023-07-01 19:14:12
  • 最終更新日:2023-07-01 19:13:48
Pythonにおけるクラスとインスタンス【初心者向け解説記事】

Workteria(ワークテリア)では難易度の高いものから低いものまで、スキルや経験に合わせた案件を多数揃えています。会員登録は無料ですので、ぜひ会員登録してご希望の案件を探してみてください!

フリーランス/正社員のエンジニアとして活躍するには、ご自身のスキルや経験に合わせた仕事を選ぶことが大切です。ご希望の案件がみつからない場合はお気軽にお問い合わせください!ユーザ満足度の高いキャリアコンサルタントが在籍していますので、希望条件や悩み事などなんでもご相談ください。ご希望にピッタリの案件をご紹介させていただきます。

Pythonにおけるクラスとインスタンスとは?

Pythonでは、オブジェクト指向プログラミングの中心的な概念である「クラス」と「インスタンス」を使用します。クラスとインスタンスの概念を理解することは、Pythonや他のオブジェクト指向プログラミング言語を深く理解する上で非常に重要です。
極論、クラスを書かなくてもプログラムを作成することは出来るかもしれませんが、クラスを用いればプログラムの可読性、保守性を高めることが出来ます寿司でクラスとインスタンスを例えれば、「寿司はシャリの上にネタを載せたもの」という概念を「クラス」で定義し、インスタンスで実際に切り身を載せて「いか」「まぐろ」「玉子」という実際の寿司を作る、といった感じです。

クラスとインスタンスを寿司で例えた図


クラスとは?

クラスとは、正確に言えば、「ある概念や目的に従って、関連するメソッドや変数を集めたもの」です。
例えば、社員の給与を管理するシステムを作るとします。このとき管理に必要な情報として、名前、社員ID、役職、現在の給与額を各社員に持たせたいと考えたとします。また、給料を増減するメソッドが欲しいと考えたとます。

このような場合、以下のクラスを作成すると便利です。コンストラクタ、selfについては後ほど解説します。

class Employee:
    # コンストラクタ
    def __init__(self, id, name, position, salary):
        self.id = id                # 社員ID
        self.name = name            # 社員氏名
        self.position = position    # 役職
        self.salary = salary        # 給与

    # 給与を増やすクラスメソッド
    def give_raise(self, amount):
        self.salary += amount


クラスの属性とメソッド

クラスの属性とは、そのクラスに属する値を保持する変数のことです。これらの変数は、クラスがインスタンス化されたときに各インスタンスで利用できます。先ほどのEmployeeクラスの例では、id、name、position、salaryがクラスの属性に当たります。

クラスメソッドとは、そのクラスが持つ関数のことです。メソッドはクラスの振る舞いを定義し、通常はクラスの属性にアクセスしたり操作したりするために使用します。例えば、Employeeクラスのgive_raiseメソッドは、salary属性にアクセスしてその値を増減する役割を持っています。


コンストラクタとは?

コンストラクタとは、クラスのインスタンスが作成される際に自動的に呼び出される特殊なメソッドです。Pythonでは、__init__メソッドがコンストラクタの役割を果たします。コンストラクタの主な目的は、インスタンスの初期化です。具体的には、インスタンス変数の初期値を設定したり、インスタンスの作成に必要な設定を行ったりします。


selfとは?

Pythonにおけるselfは、オブジェクト自身を参照するための特殊な変数で、クラス内のメソッドが自分自身のインスタンスにアクセスするために使われます。実際には、メソッドの第一引数としてselfを指定し、そのメソッドが呼び出される際には自動的にそのメソッドを呼び出したオブジェクトがselfとして渡されます。

上記のEmployeeクラスの例では、give_raiseメソッドはselfを第一引数として受け取っています。このselfは、give_raiseメソッドを呼び出す特定のEmployeeインスタンスを指し、そのインスタンスのsalary属性にアクセスすることを可能にします。


インスタンスとは?

インスタンスは、クラスから生成される実体のことを指します。クラスがテンプレートのようなもので、インスタンスはクラスが持つ属性やメソッドを持ちますが、それぞれのインスタンスはその属性の値を独自に保持します

例えば、先程のEmployeeクラスを使って、実際の社員を作成してみましょう。

Tanaka = Employee(1 , "田中", "Manager", 500000)
Sato = Employee(2, "佐藤", "Engineer", 300000)


ここで、TanakaとSatoはEmployeeクラスのインスタンスです。それぞれがクラスで定義された属性(id、name、position、salary)を持っていますが、その値はインスタンスごとに異なります。

また、それぞれのインスタンスはクラスで定義されたgive_raiseメソッドを使用できます。

Tanaka.give_raise(20000)
Sato.give_raise(10000)
print(Tanaka.salary)    # 520000
print(Sato.salary)      # 310000


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

Pythonでは、クラス内で定義される変数には「インスタンス変数」と「クラス変数」の2種類があります。

インスタンス変数は、その名の通りクラスのインスタンスごとに存在する変数で、各インスタンスが独自の値を保持します。Employeeクラスのid、name、position、salaryはすべてインスタンス変数です。

クラス変数は、クラスそのものに紐づく変数で、そのクラスのすべてのインスタンスで共有されます。例えば、全ての従業員が共通してもつ会社の名称を保持する変数を作成する場合、クラス変数を使用します。

class Employee:
    company_name = "フォワードソフト株式会社"
    
    def __init__(self, id, name, position, salary):
        self.id = id
        self.name = name
        self.position = position
        self.salary = salary
    
    def give_raise(self, amount):
        self.salary += amount


まとめ

今回の記事ではPythonのクラスとインスタンスについて詳しく解説しました。これらはオブジェクト指向プログラミングの中心的な概念であり、Pythonや他のオブジェクト指向言語を深く理解するためには必須の知識と言えます。

当記事で紹介したような知識を持つことで、Pythonのコードを読み書きする際の理解が深まり、より効率的で可読性・保守性の高いプログラムを作成することが可能になります。これらの概念はPythonだけでなく、他の多くのオブジェクト指向言語にも適用されるため、広範なプログラミングスキルの向上にも寄与します。


【著者】

ゆうさい

フォワードソフト株式会社のエンジニア。Java、Python、JavaScript、C#などの言語の他、クラウドやネットワーク技術を勉強しています。PythonやVBAを使った自動化で楽をする方法を考えるのが好きです。 最近はジェネレーティブAIの業務利用に関する検証を行っています。 資格を通じて知識を吸収することを心がけており、セキュリティスペシャリスト、データベーススペシャリスト、応用情報技術者、Oracle Certified Java Programmer Gold SE 11、Pythin3 エンジニア認定試験、HTML5プロフェッショナル認定試験レベル2、AWSプラクティショナーなどの情報資格を保有しています。

編集した記事一覧

正社員/フリーランスの方でこのようなお悩みありませんか?

  • 自分に合う案件を定期的に紹介してもらいたい
  • 週2、リモートワークなど自由な働き方をしてみたい
  • 面倒な案件探し・契約周りは任せて仕事に集中したい

そのような方はぜひ、Workteriaサイトをご利用ください!

  • 定期的にご本人に合う高額案件を紹介

  • リモートワークなど自由な働き方ができる案件多数

  • 専属エージェントが契約や請求をトータルサポート