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