I found a dynamic way to inherite classes: def MixIn(pyClass, mixInClass): if mixInClass not in pyClass.__bases__: pyClass.__bases__ += (mixInClass,)
def test1(): o = C3() MixIn(C3,C1) MixIn(C3,C2) o.m() "expected aaa" neoedmund wrote: > thank you, Kay. > > But i need a "dynamic" way. Say i have a existing class, and add some > method from other class into it. > > > Kay Schluehr wrote: > > neoedmund wrote: > > > There's a program, it's result is "unexpected aaa", i want it to be > > > "expected aaa". how to make it work? > > > > > > [code] > > > > > > class C1(object): > > > def v(self, o): > > > return "expected "+o > > > > > > class C2(object): > > > def v(self, o): > > > return "unexpected "+o > > > def m(self): > > > print self.v("aaa") > > > > > > class C3(object): > > > def nothing(self): > > > pass > > > > > > def test1(): > > > o = C3() > > > setattr(o,"m",C2().m) > > > setattr(o,"v",C1().v) > > > o.m() > > > > > > test1() > > > > > > [/code] > > > > class C3(C1, C2):pass > > > > >>> C3.mro() # shows method resolution order > > [<class '__main__.C3'>, <class '__main__.C1'>, <class '__main__.C2'>, > > <type 'object'>] > > > > >>> o = C3() > > >>> o.m() > > expected aaa -- http://mail.python.org/mailman/listinfo/python-list