Циркулярные ссылки на Python - PullRequest
2 голосов
/ 17 июля 2010

пытается создать два класса, которые ссылаются друг на друга, в одном файле.Как лучше всего это сделать:

class Foo(object):
    other = Bar

class Bar(object):
    other = Foo

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

?

Проблема, похоже, заключается в том, что, поскольку свойство находится в классе, поскольку оно пытается выполнить его, как только сам класс анализируется.*

edit:

эти ключи используются для отображения SQLAlchemy, поскольку они действительно являются переменными класса (не instance).

Ответы [ 2 ]

10 голосов
/ 17 июля 2010

Это будет делать то, что вы хотите:

class Foo(object):
    pass

class Bar(object):
    pass

Foo.other = Bar
Bar.other = Foo

Я бы предпочел полностью избежать такого дизайна.

1 голос
/ 17 июля 2010

Если вы действительно хотите, чтобы Foo.other и Bar.other были свойствами класса, а не свойствами экземпляра, тогда это работает (я проверял, просто чтобы убедиться):

class Foo(object):
    pass

class Bar(object):
    pass

Foo.other = Bar
Bar.other = Foo

Если это экземплярсвойства, которые вы ищете, тогда ответ aaronasterling является более подходящим.

...