💎PythonとRubyにおけるself.変数の違い2023/10/30に公開2023/11/01PythonRubytechはじめに私はPython→Rubyの順に勉強し始めたのですが、インスタンス変数の表記の違いに戸惑ったことがあり、記事にしました。Pythonではインスタンス変数をself.varのように書きますが、Rubyでは@varのように書くことができます。Taro!"と出力されます。User.new("Taro")user.helloところが、Rubyでも(Pythonに似た)self.varのような表記を目にすることがあったため、そのような表記が可能になる条件を調べてみました。Rubyでself.変数を使ってみるさっそく初期化メソッドでself.nameに代入しようとしたところ、エラーが出ました。(NoMethodError)エラー内容を読むと、self.nameに代入しようとすると内部的にはインスタンス変数nameに対応したセッターメソッドを呼んでいることが推察されます。今回はセッターメソッドを定義していないのでエラーが出たようです。次にセッターメソッドを設定してみると[1]、初期化メソッドの箇所ではエラーが出なくなりました。(NoMethodError)今度はhelloメソッド内でエラーが出ていますが、これもインスタンス変数nameに対応した(未定義の)ゲッターメソッドを呼んでいるためのようです。最後にゲッターメソッドも追加すると[2]、エラーが全く出なくなりました。Taro!以上の検証結果から、クラス内部でself.varのような表記で読み書きしようとすると、対応するインスタンス変数のゲッター/セッターメソッドが呼ばれ、存在しない時にはエラーが出るらしいということが分かりました。Rubyでは、クラス外部からインスタンス変数を(インスタンス名.varのような表記で)読み書きしようとすると、ゲッター/セッターメソッドが呼ばれます。クラス内においても同じような挙動になると言えそうです。まとめインスタンス変数はPythonだとself.var、Rubyでは@varのように表記するRubyでself.varのような表記を使って読み書きするには、対応するインスタンス変数についてのゲッター/セッターメソッドが必要この記事が同じような疑問を覚えた方に役立てば嬉しいです。Proよくある質問LinksX(Twitter)GitHubメディアキットLegal利用規約プライバシーポリシ。