Is there a way to specify a superclass at runtime?
Jean-Michel Pichavant
jeanmichel at sequans.com
Mon Oct 5 12:11:15 EDT 2009
Chris Colbert wrote:
> I dont think so, because that would require logic outside of the
> controller class to determine which controller to instantiate.
>
> My whole purpose for Controller is to encapsulate this logic.
>
> So, if the data should be simulated, then i just need to pass
> -simulate True as a command line argument, and the controller takes
> care of it...
>
> On Mon, Oct 5, 2009 at 3:44 PM, Richard Brodie <R.Brodie at rl.ac.uk> wrote:
>
>> "Chris Colbert" <sccolbert at gmail.com> wrote in message
>> news:mailman.868.1254748945.2807.python-list at python.org...
>>
>>
>>> I am trying to abstract this machinery in a single class called
>>> Controller which I want to inherit from either SimController or
>>> RealController based on whether a module level flag SIMULATION is set
>>> to True or False.
>>>
>> At first sight, that seems kind of odd. Wouldn't it be simpler to have
>> SimController and RealController inherit from Controller?
>>
>>
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>>
>>
Please don't top post.
Yet Richard's design is the way to go.
controller.py:
class Controller:
def getInstance(simulation):
if simulation:
return SimController()
else:
return RealController()
getInstance = staticmethod(getInstance)
class RealController(Controller):
pass
class SimController(Controller):
pass
myController = Controller.getInstance(simulation=True)
I personnally would define getInstance as a module function, but because
you prefer to put all the logic in Controller... It doesn't really
matter in the end.
Cheers,
Jean-Michel
More information about the Python-list
mailing list