【发布时间】:2016-01-25 20:55:57
【问题描述】:
我有两个相互关联的对象。我希望能够通过相关属性通过另一个对象访问一个对象。
例如A.b_relationship.obj.some_property
如何在不创建循环导入的情况下做到这一点?
# lib.py
class Relationship(object):
def __init__(self, obj):
self.obj = obj
# a.py
class A(object):
b_relationship = Relationship(B)
# b.py
class B(object):
a_relationship = Relationship(A)
为了清楚起见,我添加了这个附加示例。显然 SQLAlchemy 已经用backref 属性解决了这个问题。我不确定在不破坏其工作方式的情况下将这种东西实现到棉花糖中有多可行。也许我需要改变我的心态?
from marshmallow import Schema
from marshmallow.fields import String
from project.database import db
class PersonModel(db.Model):
name = db.Column(db.String)
class PetModel(db.Model):
name = db.Column(db.String)
owner = db.relationship('PersonModel', backref='pets')
class PersonSchema(Schema):
name = fields.String(init_arg='some value')
pets = fields.Relationship(related_schema=PetSchema)
class PetSchema(Schema):
name = fields.String()
owner = fields.Relationship(related_schema=PersonSchema)
【问题讨论】:
-
创建一个
__init__并在那里导入A和B。然后可以避免在 a.py 和 b.py 中循环导入。 This might be relevant -
您说您有两个相互关联的对象,但您是在类级别设置关系。虽然类确实是对象,但这似乎不是一个有用的创建链接。您是否希望将 A 的实例链接到 B 的实例,反之亦然,还是希望将类链接?类级链接非常无用。另外,这些类的实例是如何创建的?它们是一起存在的,还是独立创建的?
-
@user2357112 类本身不应链接在一起。他们不关心彼此。它需要链接的
_relationship属性。我稍后会关闭这些字段并使用链接的 obj 进行一些计算。 -
@user2357112 基本上,我希望能够通过
A.rel获得B和B.rel获得A。 -
呃...我在上面回复了您的回复,但现在您的最新评论更加混乱。您要关联
classes还是objects?
标签: python python-import importerror marshmallow