クラスの定義(2)

おとといの日記では、(1)の部分のFoo.__init__()内のselfの扱いがうまくいかなそう(selfはレシーバであるとするとうまくいかない)。以下のように変更。

class Foo:
    def __init__():
        self.a = 1
    def foo():
        print(self.a)

class Bar:
    mixin(Foo.__block__)  # Foo内の実装を展開
    def __init__():
        mixin(Foo.__init__.__block__)  # Foo.__init__の実装を展開
        self.b = 2
    def bar():
        print self.foo()

mixinによりコードブロックを展開している。前者は、クラスの実装を展開していて、後者は関数の実装を展開している。これなら継承を使わず、コードの再利用ができそう。また、継承を使用しないので、シンプルになると思われる。