Python 中的循环引用问题:

1 投票
1 回答
580 浏览
提问于 2025-04-16 06:21

我得到了:

ImportError: cannot import name Image (from image_blob.py)

请帮帮我,谢谢 :s

我的代码:

image.py:

from google.appengine.ext import db
from app.models.item import Item

class Image(Item):
    # imports
    from app.models.image_blob import ImageBlob
    #from app.models.user import User
    #from list_user import ListUser # is needed in order to have the references

    # references
    #uploaded_by_user = db.ReferenceProperty(User, required = True)
    large_image = db.ReferenceProperty(ImageBlob, required = True)
    small_image = db.ReferenceProperty(ImageBlob, required = True)

    # image info
    title = db.StringProperty(required = True)
    description = db.StringProperty(required = False)

    # metadata


    # relations

image_blob:

from google.appengine.ext import db


class ImageBlob(db.Model):
    from app.models.image import Image

    data = db.BlobProperty(required = True)
    image = db.ReferenceProperty(Image, required = True)

1 个回答

2

你在尝试从 image_blob.py 导入内容,但这时候 image.py 还没有完全处理完。在执行 from app.models.item import Item 的时候,class Image 还没有被定义,所以你无法导入它(整个类的定义必须先处理完,才能真正使用这个符号)。

解决这个问题的方法很简单:不要在 ImageBlob 上定义 image 属性。AppEngine 的模型会自动为你创建一个反向引用,所以当你把 ImageBlob 加入到 Image 中时,它会自动在 ImageBlob 上定义一个属性,这个属性会指向所有引用它的 Image(在你当前的使用情况下,这个数量应该是1)。

撰写回答