On Jan 4, 12:06 pm, Steven D'Aprano <steve +comp.lang.pyt...@pearwood.info> wrote: > On Tue, 03 Jan 2012 14:21:36 -0800, Peter wrote: > > I have a program that talks to a device via a serial interface. > > Structurally it looks like this: > > > Program A -> module B -> Serial > > I don't understand what this means. Program A points to module B, which > points to ... what is Serial? Where is it? Is it a class inside the > module, or another module? > > > I want to add a protocol layer around the serial port without modifying > > any of the modules above and I want to be able to use BOTH cases of the > > program whenever convenient, > > Where are you using them from? Program A, or another program? > > I don't see any way to add the extra functionality to Program A without > modifying Program A. But if you're okay with that, here's a way to > conditionally define a class to use: > > # inside Program A > import moduleB > > if condition: > Serial = moduleB.Serial # I assume moduleB has a Serial class > else: > class Serial(moduleB.Serial): # subclass > def mymethod(self): > pass > > connection = Serial(...) > > > so at first it seemed like a simple case of > > sub-classing the Serial class and then (this is the problem) somehow use > > either the original serial class definition when I wanted the original > > program functionality or the new class when I wanted the extra layer > > present. > > No problem. Here's another way to do it: > > from moduleB import Serial as SimpleSerial > class ComplexSerial(SimpleSerial): > ... > > And now you can use both at the same time. > > -- > Steven
Thanks :-) -- http://mail.python.org/mailman/listinfo/python-list