PythonのselfはJavaのthisと同じ?違いを徹底解説!

こんにちは。ゆうせいです。

プログラミングを学んでいると、PythonのselfとJavaのthisに出会いますよね。そしてこう思いませんか?

「これって同じ意味なんじゃないの?」

たしかに、どちらも「自分自身のインスタンスを参照する」という点では共通しています。でも、実は微妙な違いがあるんです!

今回はこの2つの違いや共通点を、しっかり解説していきます。例え話を交えて、初心者の方にもわかりやすくご説明しますね。


h2: selfとthisの基本的な役割

まず、どちらも「自分自身のことを指すキーワード」です。

h3: Javaのthisとは?

Javaでは、this「今操作しているインスタンス自身」を意味します。

public class Person {
    String name;

    public Person(String name) {
        this.name = name; // 引数のnameと区別するためにthisを使う
    }
}

上の例で、this.nameそのオブジェクト自身のnameフィールドを指しています。

h3: Pythonのselfとは?

Pythonでは、クラス内のメソッドの第一引数としてselfを必ず書きます。これは、そのメソッドがどのインスタンスから呼ばれたのかを示すためです。

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

同じように、self.nameそのインスタンスのname属性にアクセスします。


h2: 共通点と違いをまとめてみよう!

比較項目JavaのthisPythonのself
意味自分自身のインスタンス自分自身のインスタンス
書き方キーワードとして組み込み第一引数として明示的に書く必要あり
必須かどうか暗黙的(省略可)明示的に書かないとエラーになる
省略できる?できるできない

ここで大事なのは、Javaは自動でthisを使ってくれるけど、Pythonは自分でselfと書かないと動かないということ。


h2: 例えで理解しよう!

たとえば、Javaは執事タイプです。

「ご主人様のことはわかっていますので、言わなくても察します」

つまり、Javaではthisを省略しても大抵はちゃんと動きます。

一方、Pythonは自分で全部やるしっかり者タイプです。

「私が誰なのかは、ちゃんと教えてもらわないと困ります!」

だから、Pythonでは毎回selfを自分で書かないといけないんですね。


h2: まとめと今後の学習のヒント

  • PythonのselfとJavaのthisは、意味は似ているけど、書き方や扱い方が違う
  • Javaは暗黙的、Pythonは明示的!
  • Pythonでは、インスタンスメソッドの最初の引数に必ずselfが必要。

今後は、「インスタンスとは何か?」「クラスメソッドとインスタンスメソッドの違い」などを深掘りしていくと、さらに理解が進みます!

また、Pythonには@classmethod@staticmethodといった装飾子(デコレーター)もあります。それぞれの使い分け方もチェックしてみてくださいね。

他にも気になる用語があれば、どんどん聞いてください!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。