Python 循环引用

2 投票
2 回答
5039 浏览
提问于 2025-04-16 01:26

我想在同一个文件里创建两个互相引用的类。有什么好的方法可以让它们正常工作呢:

class Foo(object):
    other = Bar

class Bar(object):
    other = Foo

if __name__ == '__main__':
    print 'all ok'

?

问题似乎在于,因为这个属性是在类里面的,所以它会在类被解析的时候就尝试执行。

有没有办法解决这个问题呢?

补充说明:

这些键是用来做SQLAlchemy映射的,所以它们实际上是类变量(而不是实例变量)。

2 个回答

1

假设你真的想要 Foo.otherBar.other 是类的属性,而不是实例的属性,那么这个方法是可行的(我测试过,确保没问题):

class Foo(object):
    pass

class Bar(object):
    pass

Foo.other = Bar
Bar.other = Foo

如果你想要的是实例属性,那么aaronasterling的回答会更合适。

10

这个代码可以实现你想要的功能:

class Foo(object):
    pass

class Bar(object):
    pass

Foo.other = Bar
Bar.other = Foo

不过,我个人更倾向于完全避免这种设计。

撰写回答