Need advice on subclassing code

Michael Spencer mahs at telcopartners.com
Tue Nov 15 18:34:43 CET 2005


Kent Johnson wrote:
> Rusty Shackleford wrote:
>> ...
>> C_1_1 and C_1_2 share a common C ancestor, and in practice may be
>> identical, but theoretically, could have the same function name with two
>> different implementations underneath.
>>
>> ...
> 
> How are you instantiating the correct class? You should be able to provide a default behaviour. For example if the classes are all defined in module C you could have a factory like this:
> 
> import C
> def makeC(x, y):
>   subtype = 'C_%d_%d' % (x, y)
>   cls = getattr(C, subtype, C.C)
>   return cls(x, y)
> 
> Then in module C just define the subtypes you need to specialize; all other values of x and y will get the base class C.C.
> 
> Kent

Or, if you actually want different classes for each set of parameters (say for 
debugging or introspection), you could compose the default ones on the fly:


import C
def makeC(x, y):
   subtype = 'C_%d_%d' % (x, y)
   cls = getattr(C, subtype, None)
   if not cls:
     # No specialized class found, so compose a default
     # This requires C.C to be a new-style class
     cls = type(subtype, (C.C,), {"__autogenerated__": True})
   return cls(x, y)

Michael






More information about the Python-list mailing list