Ruby、Pythonでクラスのインスタンスメソッドを追加する
ちょっと前まではrubyで、最近はpythonで仕事をしているので、rubyでやっていたアレ、pythonだとどうやるんだろ?と思うことがたまにあります。
で、クラスへのインスタンスメソッド追加ですが、
rubyではオープンクラスによって、インスタンスメソッドが追加できます
以下はメタプログラミングRubyで紹介されている例で、Stringクラスにメソッドを追加してます
class String def to_alphanumeric gsub /[^\w\s]/, '' end end "#3, the *Magic Number?*".to_alphanumeric # => => "3 the Magic Number"
pythonではビルトインクラスにメソッドを追加することはできません
こんなエラーになります
TypeError: can't set attributes of built-in/extension type 'str'
ビルトインクラスでないならば、関数の参照を代入することができます
class Person(): def __init__(self, name): self.name = name gushiken = Person('gushiken') me = Person('yuhei') def greeting(self): print("hello, my name is %s." % self.name) Person.greeting = greeting me.greeting() gushiken.greeting()
strに振るまいを追加したい場合は、strのサブクラスを作成する、というのがpython wayなんだと思います。たぶん。
- 作者: Paolo Perrotta,角征典
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2010/08/28
- メディア: 大型本
- 購入: 18人 クリック: 533回
- この商品を含むブログ (127件) を見る