クラスに後からメソッドを追加


関数を作って、クラスにsetattrすればいいだけです。



Pythonではメソッドと関数はほとんど同じものです。

クラスの中にある関数がメソッドであると考えてよさそうです。



setattrでクラスの中に突っ込むと、途端にただの関数からメソッドに突然、変身します。

from Tkinter import *

def write(self, ss):
    self.insert(END, ss)
setattr(Text, "write", write)

print write      # &#061;> <function write at 0x00A59AB0>
print Text.write # &#061;> <unbound method Text.write>

root &#061; Tk()
text_ww &#061; Text(root)
text_ww.pack()

print >> text_ww, "fizzbuzz"
print >> text_ww, "buzz"
print >> text_ww, "fizz"
text_ww.see(END)
root.mainloop()


ちなみにこの方法、一旦クラスを変更すると、

同じクラスを使っている、プログラムの他の部分にも影響が波及するので、乱用は禁物です。