glomde schrieb: > Hi I wonder if you can set what subclass a class should > have at instance creation. > > The problem is that I have something like: > > class CoreLang(): > def AssignVar(self, var, value): > pass > > class Lang1(CoreLang): > def AssignVar(self, var, value): > return var, "=", value > > class Lang2(CoreLang): > def AssignVar(self, var, value): > return var, "<=", value > > class WriteStruct(): > def Generate(self, vars): > for var in vars: > print self.AssignVar() > > The problem is that I want WriteStruct to sometimes be a subclass of > Lang1 and sometimes > of Lang2. > In the above example I could but the Generate Method in CoreLang. But > in my real > example I also want to able to subclass WriteStruct to be able to easy > customize WriteStruct. > Which I wouldnt be able to do if it was a method in CoreLang. > > So in code I would like to write something like: > > WriteStruct(Lang1).Generate(vars) > > Even better would be that if I in the Lang1 class could > just do WriteStruct().Generate(vars) and Lang1 class would > magically make WriteStruct a subclass of itself. > > > Cheers, > > /T >
If you really need to inherit at runtime, you could utilize `type()`. >>> def foo(self, blah): ... print self, blah ... >>> attrs = {'foo': foo} >>> cls = type('MyCls', (object,), attrs) >>> cls().foo(4) <__main__.MyCls object at 0x009E86D0> 4 Changing ``object`` (the tuple contains all bases) will change the parent. But, better stick to previous solutions. :) Stargaming -- http://mail.python.org/mailman/listinfo/python-list