withを使ってなにか出来ないかずっと考えてたんだけどありきたりなアイディアしか浮かばなかった。 でもあまりwithをどうこうっていうのを書いてる人もいなかったので書いておく。 with句のブロック間のみクラスを拡張する。 from contextlib import contextmanager @contextmanager def mixin(cls, mixcls): bases = cls.__bases__ try: cls.__bases__ += (mixcls,) yield cls finally: cls.__bases__ = bases class A(): def test(self): print("is A") class B(): def spam(self): print("is B") a = A() a.test() #a.spam() #=> At