How to set a class inheritance at instance creation?

Steve Holden steve at holdenweb.com
Tue May 29 16:45:27 EDT 2007


glomde wrote:
> 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.
> 
> 
You should rethink your program design.

It seems that when you create a WriteStruct you should really be passing 
its __init__() method the class that you want it to be a "subclass" of, 
creating an instance of that class, and then using generic delegation to 
that subclass (using a modified __getattr__()) to handle methods that 
aren't found in the WriteStruct.

I can see there are circumstances in which this might not work, but I 
believe your current ugly intentions reveal a design smell that you 
really need to get rid of if you want a clean program.

regards
  Steve
-- 
Steve Holden        +1 571 484 6266   +1 800 494 3119
Holden Web LLC/Ltd           http://www.holdenweb.com
Skype: holdenweb      http://del.icio.us/steve.holden
------------------ Asciimercial ---------------------
Get on the web: Blog, lens and tag your way to fame!!
holdenweb.blogspot.com        squidoo.com/pythonology
tagged items:         del.icio.us/steve.holden/python
All these services currently offer free registration!
-------------- Thank You for Reading ----------------



More information about the Python-list mailing list