wsgirefを見て気になったコード
気になった部分があったので、調べてみた。
たぶん、メソッドディスパッチのコストを下げるためのもの。
似たようなベンチマークを書いて速度図ってみた。
class A(object): def _write(self, ys): raise NotImplementedError from StringIO import StringIO io = StringIO() class B(A): def _write(self, s): io.write(s) self._write = io.write class C(A): def _write(self, s): io.write(s) import time class Bench(object): target_cls = None @classmethod def run(cls, N): target = cls.target_cls() for i in xrange(N): target._write("foo") @classmethod def bench(cls, N): start = time.time() cls.run(N) end = time.time() print "Start:",start, " End:", end print "ExecTime:",end-start class BBench(Bench): target_cls = B class CBench(Bench): target_cls = C N = 1000000 BBench.bench(N) CBench.bench(N) BBench.bench(N) CBench.bench(N) # Start: 1304342923.02 End: 1304342924.42 # ExecTime: 1.40685200691 # Start: 1304342924.42 End: 1304342926.15 # ExecTime: 1.72291111946 # Start: 1304342926.15 End: 1304342927.56 # ExecTime: 1.41061210632 # Start: 1304342927.56 End: 1304342929.26 # ExecTime: 1.70022082329
どうやらそういうことらしい。
本当にパフォーマンスが重要なとき以外必要ないことかも