Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #66604
| From | Peter Otten <__peter__@web.de> |
|---|---|
| Subject | Re: Import order question |
| Date | 2014-02-17 14:29 +0100 |
| Organization | None |
| References | <53020843.5010804@shopzeus.com> |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.7095.1392643747.18130.python-list@python.org> (permalink) |
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...
Back to comp.lang.python | Previous | Next | Find similar | Unroll thread
Re: Import order question Peter Otten <__peter__@web.de> - 2014-02-17 14:29 +0100
csiph-web