我如何处理双重引用和随之而来的导入错误

How do I work with double references and consequent import errors

我 运行 遇到了导入和引用方面的问题。我要用一个虚构的例子来解释(这个例子使用mongoengine)

假设我在两个不同的文件中有以下两个 classes

# File 1 
# Titled houses.py

import persons
import mongoengine as me

class House(me.Document):
    residents: me.ListField(me.ReferenceField(persons.Person)) #This will be a list populated with Person objects
# File 2
# Titled persons.py

import houses
import mongoengine as me

class Person(me.Document):
    house: me.ReferenceField(houses.House) #This is a House object

在上述情况下我有两个顾虑

  1. 我收到一个循环导入错误(b/c 他们需要彼此)- 我无法摆脱导入 b/c mongo 要求您输入 class 将分配给变量的对象
  2. 这似乎不太理想 - 是否有设计模式可以改善这种情况?

谢谢!

看来你可以给ReferenceField传递一个string参数,应该可以解决你的问题。

文件 1 :

import mongoengine as me

class House(me.Document):
    residents: me.ListField(me.ReferenceField("Person"))

文件 2:

import mongoengine as me

class Person(me.Document):
    house: me.ReferenceField("House")