【必読】Pythonのselfについてわかりやすく解説|コード付

※本サイトにはプロモーション・広告が含まれています。

(最終更新日:2023年7月)

✔この記事は以下のような方におすすめです

「pythonのselfとは何なのか詳しく知りたい」
「selfの使い方を学びたい」
「pythonのselfを使用した具体的なコードが見たい」

✔当記事でご紹介する内容

  • python selfの基本知識
  • python selfの使用方法と応用方法
  • python selfを活用した実例

当記事では、python selfの基本知識だけでなく、実際のコードを使用してその応用方法までを詳細に説明します。

ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Pythonのselfを理解するための前提知識

こちらでは、Pythonのselfを理解するための前提知識を確認していきます。

事前に必要な知識としては以下のとおりです。

  • Pythonとは?
  • Pythonのselfとは?
  • Pythonクラスの基本

Pythonとは

Pythonは、1991年に初版が公開された高水準のプログラミング言語です。

そのシンプルで読みやすい構文は、初心者にも学びやすく、また実践的なアプリケーションを効率的に開発できます。

PythonはWeb開発、データ分析、人工知能、教育など、幅広い分野で利用されています。

Pythonのselfとは?

selfとは、クラスのインスタンスを指す特殊な引数です。

クラス内で定義されたメソッドは、そのメソッドを呼び出すオブジェクト自身への参照を第一引数として取ります。

この第一引数が、selfです。

以下は、selfがどのように動作するかを示すサンプルコードです。

class MyClass:
    def __init__(self):
        self.value = 10 #自身(self)のvalue属性に10を設定

  # self.valueを出力する関数
    def print_value(self):
        print(self.value)

my_instance = MyClass()
my_instance.print_value()  # 出力 10

ここでのselfは、my_instanceオブジェクトを指しており、そのためself.valuemy_instance.valueと同等です。

selfは、クラス内部からインスタンスの属性や他のメソッドにアクセスするための手段を提供します。

Pythonではこれを暗黙的に提供しているわけではないため、それを引数として明示的に指定する必要があるのです。

Pythonクラスの基本

クラスは、オブジェクト指向プログラミングにおける基本的な概念です。

Pythonのクラスは、データと関数をまとめる手段として使用されます。

例えるなら、クラスはオブジェクトの青写真のようなもので、同じ種類のオブジェクトを生成するための設計図です。

これにより、コードの再利用性と整理が向上します。

以下の記事では、クラスについてわかりやすく解説しています。

‘self’の本質を解明する

こちらでは、selfに焦点を当て、その詳しい説明と、なぜselfが必要なのかを解説します。

  • ‘python self’の詳しい説明
  • ‘self’がなぜ必要なのか

‘python self’の詳しい説明

selfはPythonのクラス内で使われる特別な変数で、インスタンス自体を指します

selfを使うことで、クラス内のメソッドが、同じインスタンスの属性や他メソッドにアクセスできるのです。

例えば、以下のクラスでselfを使用しています。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print(f"Hello, my name is {self.name} and I am {self.age} years old.")

__init__メソッドで、selfを使って属性nameageを作成。

say_helloメソッドで、selfを使ってこれらの属性にアクセスしています。

‘self’がなぜ必要なのか

selfは、インスタンスの属性やメソッドにアクセスするために必要なもの。

なぜならクラス内で定義されたメソッドは、インスタンスで呼び出されることが一般的だからです。

これがなければ、メソッドはインスタンスのデータにアクセスする手段がなくなります。

‘self’の活用法を学ぶ

こちらでは、selfの実際の使用例と活用方法を学びます。

  • インスタンス変数としての’self’の利用法
  • クラス変数としての’self’の利用法
  • クラス継承時の’self’の扱い方

インスタンス変数としての’self’の利用法

selfは通常、インスタンス変数を定義する際に使用されます。

インスタンス変数は、その名前が示す通り、インスタンスに属しており、各インスタンスはそれぞれ異なる値を持つことができます。

以下に具体的な例を示します。

class Car:
    def __init__(self, make, model):
        self.make = make
        self.model = model

my_car = Car("Toyota", "Corolla")
print(my_car.make)  # Output: Toyota
print(my_car.model) # Output: Corolla

上記の例では、Carクラスにはmakemodelという2つのインスタンス変数があります。

これらはselfを用いて定義されており、異なるインスタンスでそれぞれ異なる値を持てるのです。

変数については詳しくこちらで解説しています。

【Python】変数の定義方法から役割、注意点までコード付きで解説
Pythonで「変数」を使用する方法について知りたいですか?変数はデータを一意に識別し、Pythonプログラム内で操作するための基本的なツールです。当記事では、Pythonの変数使用法を具体的なコード付きで丁寧に解説しています。特にPython初心者の方には必見の内容です。

クラス変数としての’self’の利用法

クラス変数は、クラス全体で共有される変数です。

しかし、selfを通じてクラス変数にアクセスもできます。

これにより、インスタンスがクラス変数を変更すると、他のインスタンスでもその変更が反映されます。

class Dog:
    total_dogs = 0

    def __init__(self, name):
        self.name = name
        Dog.total_dogs += 1

dog1 = Dog("Buddy")
dog2 = Dog("Rex")

print(Dog.total_dogs) # Output: 2

この例では、total_dogsはクラス変数で、すべてのDogインスタンス間で共有されます。

クラス継承時の’self’の扱い方

Pythonでは、クラスの継承を利用して、既存のクラスから新しいサブクラスを作成可能。

selfは、サブクラスでもスーパークラスと同じように使えます

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

    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print(f"{self.name} says Woof!")

dog = Dog("Buddy")
dog.speak() # Output: Buddy says Woof!

この例では、DogクラスはAnimalクラスを継承しており、selfを使ってスーパークラスの属性にアクセスしています。

‘python self’の使い方への注意点

こちらでは、selfの使い方に関する注意点を解説します。

  • 一般的なエラーとその対策方法
  • メソッド間でのインスタンス変数(self)の共有法
  • ‘self’以外を第一引数にする場合の凡例と結果

一般的なエラーとその対策方法

selfの使い方に関する間違いは初学者によく見られます。

例えば、インスタンスメソッド内でselfを使用せずにインスタンス変数にアクセスしようとすると、エラーが発生。

これを解消するには、インスタンス変数にアクセスする際には必ずselfを使用しましょう。

class MyClass:
    def __init__(self, value):
        self.value = value

    def show_value(self):
        print(value)  # This will cause an error

obj = MyClass(5)
obj.show_value()

show_valueメソッド内でselfを使っていないため、エラーが発生します。

これを解消するためには、以下のように変更してください。

print(value)をprint(self.value)へ

メソッド間でのインスタンス変数(self)の共有法

クラス内の異なるメソッド間でデータを共有する場合、selfを使用してインスタンス変数を設定することが一般的です。

これにより、同じインスタンスの異なるメソッドが同じデータにアクセスできるようになります。

class Calculator:
    def __init__(self, x):
        self.x = x

    def square(self):
        self.result = self.x ** 2

    def show_result(self):
        print(self.result)

calc = Calculator(4)
calc.square()
calc.show_result()  # Output: 16

‘self’以外を第一引数にする場合の凡例と結果

一般的に、selfはインスタンスメソッドの第一引数として使用されますが、厳密にはselfという名前である必要はありません。

他の名前でも機能しますが、selfが慣習として広く使われています。

class Example:
    def __init__(alternative_self, value):
        alternative_self.value = value

    def show_value(alternative_self):
        print(alternative_self.value)

obj = Example(7)
obj.show_value()  # Output: 7

コードは後から見返したり、他人が修正を加えたりします。

慣習に従うことで、余計な混乱を避けられるでしょう。

つまり、インスタンスの参照には「self」を使うべきです。

‘Pythonのself’に関するよくある質問とその回答

Pythonのselfについて、よくある質問をまとめました。

事前に学んでおくことで、余計なエラーやトラブルを回避できるでしょう。

  • Q:selfはPythonのキーワードですか?
  • Q: selfを引数として明示的に渡す必要はありますか?
  • Q: 静的メソッドとクラスメソッドではselfは使われますか?

Q: selfはPythonのキーワードですか?

A: いいえ、selfはPythonのキーワードではありません。

これは単に慣習によるもので、実際には任意の名前を使用可能です。

ただし、selfという名前が広く使われているため、コードの可読性のためにこの名前を使用することが推奨されています。

Q: selfを引数として明示的に渡す必要はありますか?

A: いいえ、通常、selfは暗黙的に渡されます。

インスタンスメソッドを呼び出す際に、Pythonは自動的にそのインスタンスをselfとしてメソッドに渡します。

Q: 静的メソッドとクラスメソッドではselfは使われますか?

A: いいえ、静的メソッドではselfは使われません。

クラスメソッドでは、代わりにクラス自体が最初の引数として渡されるため、慣習的にこの引数はclsと名付けられます。

まとめ

当記事では、Pythonのselfについて詳しく学びました。

  • selfは、クラス内のメソッドがインスタンスの属性やメソッドにアクセスする際に使用される
  • selfは、任意の名前でも良いが、慣習に従うことで、余計な混乱を招かないで済む
  • selfは習慣づければ簡単にマスターできる]

Pythonでコードを書いていると、必ずselfを使います。

最初は違和感があったとしても、使い続ければその役割を実感できるはず。

当記事のコードを真似しながら、selfの存在・役割を体感してください。

タイトルとURLをコピーしました