Import order question
Peter Otten
__peter__ at web.de
Mon Feb 17 08:29:07 EST 2014
Nagy László Zsolt wrote:
> I have a class hierarchy like this:
>
> Widget <- VisualWidget <- BsWidget
>
> and then BsWidget has many descendants: Desktop, Row, Column, Navbar etc.
>
> Widgets can have children. They are stored in a tree. In order to manage
> the order of widgets, I need methods to append children. (And later:
> insert or prepend because they also have an order). So I would like to
> have methods like this:
>
> BsWidget.AppendNavbar(....)
> BsWidget.AppendRow(...)
>
> Here is the problem: these methods should create instances of Row,
> Column and Navbar. But this leads to circular imports.
>
> Here is code for BsWidget:
>
> from shopzeus.yaaf.ui.visualwidget import VisualWidget
>
> from shopzeus.yaaf.ui.bootstrap.row import Row
> from shopzeus.yaaf.ui.bootstrap.column import Column
> from shopzeus.yaaf.ui.bootstrap.navbar import Navbar
>
> class BsWidget(VisualWidget):
> """Visual widget for bootstrap.
>
> Adds extra methods for adding/removing content like rows
> columnsetc.""" def __init__(self,parent):
> <more code here>
>
> def AppendRow(self):
> return Row(self)
>
> def AppendColumn(self):
> return Row(self)
>
> def PrependRow(self):
> return Row(self,position=-1)
>
> <more code here>
>
>
> Here is code for ClassX (where ClassX can be: Row, Column, Desktop,
> Navbar etc.):
>
> from shopzeus.yaaf.ui.bootstrap.bswidget import BsWidget
> <more imports here>
>
> class ClassX(BsWidget):
> <more code here>
>
> The circular import is as follows:
>
> * I want to create a Desktop instance
> * I try to import shopzeus.yaaf.ui.bootstrap.desktop
> * That tries to import BsWidget
> * That tries to import Row
> * That tries to import BsWidget, which is importing -> I get an
> "ImportError: cannot import name BsWidger"
Hm, is that cut-and-paste? If so fix the name. If that doesn't work use
qualified names:
from shopzeus.yaaf.ui.bootstrap import row
[...]
def AppendRow(self):
return row.Row(self)
If that still doesn't work follow Ben's advice and be enlightened...
More information about the Python-list
mailing list