How to set a class inheritance at instance creation?
Stargaming
stargaming at gmail.com
Tue May 29 14:23:45 EDT 2007
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
More information about the Python-list
mailing list