Mutually referencing imports -- impossible?

John Machin sjmachin at lexicon.net
Mon Jul 14 01:15:47 CEST 2008


On Jul 14, 3:55 am, Matthew Wilson <m... at tplus1.com> wrote:
> I started off with a module that defined a class Vehicle, and then
> subclasses Car and Motorcycle.
>
> In the Car class,  for some bizarre reason, I instantiated a Motorcycle.
> Please pretend that this can't be avoided for now.
>
> Meanwhile, my Motorcycle class instantiated a Car as well.
>
> Then I moved the Car and Motorcycle classes into separate files.  Each
> imported the Vehicle module.
>
> Then I discovered that my Car module failed because the global
> Motorcycle wasn't defined.  The same problem happened in my Motorcycle
> module.  Car and Motorcycle can't both import each other.

And they should not import each other.

>
> In the beginning, when all three (Vehicle, Car, and Motorcycle) were
> defined in the same file, everything worked fine.

You seem to have a strange notion of "worked fine".

>
> I don't know how to split them out in separate files now though and I
> really wish I could because the single file is enormous.

What is making a file with 3 classes "enormous"?? What is "enormous"?

>
> Any ideas?

*WRONG WAY*
*GO BACK*

Your structure is not only bizarre, it is also (sticking with only 1
letter of the alphabet) a Byzantine, baroque, and broken concept.

Asking us to "pretend that this can't be avoided for now" is asking
us to aid and abet you in creating a meaningless and unmaintainable
monster. Consider adding Truck and Bus subclasses. Will each subclass
instantiate the other 3??? You should be able to add or remove a
subclass without having to modify all other subclasses.

The only rational solution is not to have the subclasses refer to each
other. Tell us *why* you think you need to have Car refer to
Motorcycle and vice versa, and we should be able to help you find a
way out.

Cheers,
John



More information about the Python-list mailing list