Error de importación. Referencias circulares

Tengo un paquete 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

En moduleB.py, estoy importando

from moduleA import bar

En el módulo A, estoy importando.

from moduleB import foo

Estoy recibiendo ImportError.

ImportError: cannot import name foo

Cual podría ser el problema aquí ? y para evitar este problema, ¿qué debo hacer? y en que debo escribir_en eso_.py pf package, subpackage1, subpackage2?

_en eso_.py del subpaquete 1

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

_en eso_.py del subpaquete 2

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

_en eso_.py del paquete

from subpackage1 import *
from subpackage2 import *

Hay algun problema con mi_en eso_archivos .py?

EDITAR: He cambiado las importaciones

móduloB

from .moduleA import bar

móduloA

from .moduleB import foo

Aún así, estoy recibiendo el mismo error de importación.

ImportError: cannot import name foo

EDITAR:

móduloB

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

móduloA

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

Quiero hacer esto. E insisto en mantener ambas clases en archivos diferentes. ¿Cómo debo importar?

Respuestas a la pregunta(2)

Su respuesta a la pregunta