Olá. Acredito que você possa procurar no domínio alguma entidade que representante essa relação de forma mais sólida. Algo como uma Turma ou uma Classe que (essas sim) possuem aulas e alunos. Dessa forma você consegue enriquecer o modelo futuramente em caso de necessidade, com horário por exemplo.

Soh pra ver se eu entendir, aii nesse caso entao eu teria uma Turma, essa turma teria uma lista de alunos e uma lista de disciplinas pra esses alunos ?

from app.aluno import Aluno
from app.aula import Aula

class Turma:
    alunos: [Aluno]
    disciplinas: [Aula]

Isso ? Pensando nesse caso, eu acredito q mataria o problema da importacao circular. Manteria o comportamento esperado do sistema.

Mas minha duvida nesse caso(falo como leigo msm, n to e nem tenho muita propriedade pra dizer q esta errado), mas ter uma classe Turma q faz o intermedio entre aluno e aula n seria o mesmo q ter uma tabela Aluno x Aula, digo em algum lugar eu li q nao eh mais usual desenvolver sistemas q espelhem a arquitetura de um banco de dados, ateh pq a forma de arquitetar um banco SQL seria diferente de um noSQL. Sendo assim, eu to tentando entender uma forma q fuja da arquitetura do banco de dados em si.

Na vdd no fundo eu me pergunto se tem uma forma de fazer o desenvolvimento de forma concisa que n precise de uma classe Turma para unir aluno e aula.

Agradeco muito pela tua resposta, nesse primeiro momento eu vou desenvolver com a ideia q tu me passou, e como eh um caso apenas de estudo, eu vou alterando a medida q adquiro mais conhecimento. Vlw guri =]

Você ter uma classe (ou conceito) de turma nao é espelhar o banco de dados, mas sim o dominio do negócio da aplicação. Quando puder dá uma olhada em Domain Driven Design e linguagem ubiqua. Pode te ajudar a tomar decisões de arquitetura.
Me incomoda pq essa solucao me parece muito com a forma ao qual seria feita em um banco de dados. tabela aluno tabela aula tabela turma(aula x aluno) Esse conceito do sistema ser construido semelhante ao banco de dados ta me pegando, digo n por estar errado ou gerar algum erro, ateh pq minhas experiencias com desenvolvimento visam o banco de dados como o alicerce e o sistema ser construido a partir da da base, tendo classes espelhadas com as tabelas do banco. Mas recentemente li q essa abordagem de cosntrucao de sistemas nao eh mais tao usual, pq hj podemos ter sistemas com bancos SQL e noSQL sendo assim essa abordagem cai por terra. Foi aii q comecei com esse projeto, algo simples mas q de alguma forma eu consiga entender esse novo conceito(novo pra mim na real). Soh q faz um certo tempo q eu to empacado nisso, aii resolvi postar aqui.
Tranquilo. Desculpe, acabei alterando minha resposta e a sua pareceu fora de contexto, mas entendi o que você disse. Dependendo da aplicação modelar a aplicação baseado no banco de dados não é uma boa solução. Você criar classes artificiais (que não seguem o dominio) apenas para relacionar dados trás uma complexidade desnecessária. Mas existem classes e classes. Na dúvida revisita o domínio e verifica se ele já nao possui algo para identificar essa relação.
Saquei, cara, muito obrigado msm, ja me abriu um caminho pra onde eu devo estudar.
Hummmmm Entendi, massa, vou dar uma olhada sim, pq agora q vc comentou sobre o dominio, pode ser q eu esteja confuso com o conceito de fato. Nao qrendo abusar massss, tem algum material que vc indicaria ou algum livro q trate bem dos assuntos ?
Dá uma lida nesse artigo bem introdutório para te ajudar a entender os conceitos https://www.locaweb.com.br/blog/temas/codigo-aberto/ddd-entenda-o-domain-driven-design/ Procura pelo Livro "Domain Driven Design - atacando a complexidade no coração do software". É a melhor fonte sobre o assunto, mas é bem..."denso" de informação o que torna a leitura um pouco cansativa, mas vale a pena. Fiz uma pesquisa rapida e achei esse cara aqui https://dddinpython.com/ que oode ser útil baseado no seu exemplo.