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のthis | Pythonのself |
---|---|---|
意味 | 自分自身のインスタンス | 自分自身のインスタンス |
書き方 | キーワードとして組み込み | 第一引数として明示的に書く必要あり |
必須かどうか | 暗黙的(省略可) | 明示的に書かないとエラーになる |
省略できる? | できる | できない |
ここで大事なのは、Javaは自動でthisを使ってくれるけど、Pythonは自分でselfと書かないと動かないということ。
h2: 例えで理解しよう!
たとえば、Javaは執事タイプです。
「ご主人様のことはわかっていますので、言わなくても察します」
つまり、Javaではthis
を省略しても大抵はちゃんと動きます。
一方、Pythonは自分で全部やるしっかり者タイプです。
「私が誰なのかは、ちゃんと教えてもらわないと困ります!」
だから、Pythonでは毎回self
を自分で書かないといけないんですね。
h2: まとめと今後の学習のヒント
- Pythonの
self
とJavaのthis
は、意味は似ているけど、書き方や扱い方が違う! - Javaは暗黙的、Pythonは明示的!
- Pythonでは、インスタンスメソッドの最初の引数に必ず
self
が必要。
今後は、「インスタンスとは何か?」「クラスメソッドとインスタンスメソッドの違い」などを深掘りしていくと、さらに理解が進みます!
また、Pythonには@classmethod
や@staticmethod
といった装飾子(デコレーター)もあります。それぞれの使い分け方もチェックしてみてくださいね。
他にも気になる用語があれば、どんどん聞いてください!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
