代码之家  ›  专栏  ›  技术社区  ›  sharvey

python循环引用

  •  2
  • sharvey  · 技术社区  · 16 年前

    试图在同一个文件中有两个相互引用的类。最好的方法是:

    class Foo(object):
        other = Bar
    
    class Bar(object):
        other = Foo
    
    if __name__ == '__main__':
        print 'all ok'
    

    ?

    问题似乎是因为属性在类上,因为它试图在分析类本身时立即执行。

    有办法解决这个问题吗?

    编辑:

    这些键用于SQLAlchemy映射,它们实际上是类变量(不是实例)。

    2 回复  |  直到 8 年前
        1
  •  10
  •   zvone    16 年前

    这将满足您的需求:

    class Foo(object):
        pass
    
    class Bar(object):
        pass
    
    Foo.other = Bar
    Bar.other = Foo
    

    不过,我宁愿完全避免这种设计。

        2
  •  1
  •   Dan Breslau    16 年前

    假设你真的想要 Foo.other Bar.other 要成为类属性,而不是实例属性,那么这是有效的(我测试过,只是为了确定):

    class Foo(object):
        pass
    
    class Bar(object):
        pass
    
    Foo.other = Bar
    Bar.other = Foo
    

    如果您需要的是实例属性,那么aaronasterling的答案更合适。