■
単体で使いたかったので、Mozillaのをコンパイルしてみた。
http://lxr.mozilla.org/mozilla/source/js/src/README.html
#!/usr/bin/env js function HelloWorld() { this.sayHello = function() { print("Hello") } } var world = new HelloWorld() world.sayHello() world.sayHi = function (name){ print("Hi " + name) } world.sayHi("Tea") // クラスにメソッドを追加するには prototype // プロパティに設定する。 HelloWorld.prototype.hello = function() { this.sayHello() } world.hello()
実行結果は、
Hello Hi Tea Hello
ProthonやE言語、
Rubyでも問題なく出来るんだけど、Pythonでは少し面倒。classmethodやstaticmethod関数はあるのに、インスタンスメソッドを作るビルトイン関数がないんだよなぁ ...
def instancemethod(func): class _Class: def _func(self, *args, **keys): return func(self, *args, **keys) return _Class().func class Foo: pass def hi(self, name): print "Hi %s" % name obj = Foo() obj.sayHi = instancemethod(hi) obj.sayHi("TeaMiKL")
obj.sayHi に関数を代入したいが、
functionとmethodの違いの為、自分でselfを渡さないといけない。
obj.sayHi = hi obj.sayHi(obj, "TeaMiKL")
これがインスタンスでなくクラスの場合は、
setattr(Foo, "sayHi", hi)または、
Foo.sayHi = hi でメソッドを追加設定できる。