牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

『メタプログラミングRuby 1.2.1 クラス定義の中身』のオープンクラス == モンキーパッチ あたりの件

Python

Pythonだとエラーになるが...

class D:
    def x(self):
        return "x"

class D:
    def y(self):
        return "y"

obj = D()
print obj.x()
print obj.y()

#=> Traceback (most recent call last):
#=>   File "qr_96298g4R.py", line 10, in <module>
#=>     print obj.x()
#=> AttributeError: D instance has no attribute 'x'

Ruby

Rubyでは既存のクラスを再オープンして、メソッドを追加する。

class D
  def x
    "x"
  end
end

class D
  def y
    "y"
  end
end

obj = D.new
puts obj.x
puts obj.y

#=> x
#=> y

Ruby のclassキーワードは、クラス宣言と言うよりもスコープ演算子のようなものである。
(『メタプログラミングRuby』 1.2.1 クラス定義の中身)