Is there anyway to selectively inherit/import a class/module?

Steven D'Aprano steve+comp.lang.python at pearwood.info
Tue Jan 3 20:06:20 EST 2012


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



More information about the Python-list mailing list