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)