Erro de importação. Referências Circulares

Eu tenho um pacote como este

package/
    __init__.py
    subpackage1/
        __init__.py
        moduleA.py
        moduleB.py
        moduleC.py
        moduleD.py
    subpackage2/
       __init__.py
       moduleX.py
       moduleY.py
       moduleZ.py

Em moduleB.py, estou importando

from moduleA import bar

No moduleA, estou importando

from moduleB import foo

Estou recebendo o ImportError.

ImportError: cannot import name foo

Qual poderia ser o problema aqui? e para evitar esse problema, o que devo fazer? e o que devo escrever em_nisso_.py pf package, subpackage1, subpackage2?

_nisso_.py do subpackage1

from moduleA import *
from moduleB import *
from moudleC import *
from moudleD import *

_nisso_.py do subpackage2

from moduleX import *
from moduleY import *
from moduleZ import *

_nisso_.py do pacote

from subpackage1 import *
from subpackage2 import *

Existe algum problema com o meu_nisso_arquivos .py?

EDITAR: Eu mudei as importações

moduleB

from .moduleA import bar

moduleA

from .moduleB import foo

Ainda assim, estou recebendo o mesmo erro de importação.

ImportError: cannot import name foo

EDITAR:

moduleB

def Bar():
    def __init__(self):
        self.foo = Foo()
        self.val = 10
        .
        .

moduleA

def Foo():
    def __init__(self):
        self.bar = Bar()
        self.val = 5
        .
        .   

Eu quero fazer isso. E insisto em manter as duas classes em arquivos diferentes. Como devo importar?