getattrとObject#sendについて

django Published at March 7, 2025, 12:23 a.m. by admin@senrigan.org

ChatGPTにPythonのgetattrとRubyのObject#sendって同じようなもの?って聞いてみた

  • オブジェクトのメソッドや属性を動的に呼び出す、という点で似ている

でも機能や使い方に違いがあるらしい。

getattr

例:

user = User("Alice")
getattr(user, "name", "UNKNOWN")
  • 3つ目の引数で、2つ目の引数で指定した属性やメソッドが存在しなかった場合のデフォルト値を設定できる
  • privateメソッドは呼び出せない

Object#send

  • privateメソッドも呼べる
  • 呼びたいメソッドに引数渡せる
  • 呼びたいメソッドが存在しなかった場合、method_missingを定義しておくとそれが呼ばれるんだっけ?

例:

calc = Calc.new
calc.send(:add, 1, 2)