import order or cross import

Roland Hedberg roland.hedberg at adm.umu.se
Wed Jan 3 09:29:01 CET 2007


Hi!

I'm having a bit of a problem with import.

I'm writing a marshalling system that based on a specification will
create one or more files containing mostly class definitions.

If there are more than one file created (and there are reasons for
creating more than one file in some instances) then they will import
each other since there may be or is interdependencies in between them.

And this is where the going gets tough.

Let's assume I have the following files:

------------- ONE.py --------------------

import TWO

class Car:
    def __init__(self):
        self.color = None

    def set_color(self,v):
        if isinstance(v,TWO.Black) or isinstance(v,TWO.White):
            self.color = v

class BaseColor:
    def __init__(self):
	pass
    def __str__(self):
        return self.color

if __name__ == "__main__":
    car = Car()
    color = TWO.Black()
    car.set_color(color)
    print car.color

-------------- TWO.py -------------------

import ONE

class Black(ONE.BaseColor):
    color = "Black"
    def __init__(self):
        ONE.BaseColor.__init__(self)

class White(ONE.BaseColor):
    color = "White"
    def __init__(self):
        ONE.BaseColor.__init__(self)

-----------------------------------------

Now, running ONE.py causes no problem it will print "Black", but running
TWO.py I get:
AttributeError: 'module' object has no attribute 'BaseColor'

So, how can this be solved if it can be ?

To join ONE.py and TWO.py into one file could be a solution if there
where no other conditions (non-language based) that prevented it.

-- Roland




More information about the Python-list mailing list