2010-07-17 2 views
2

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

class Foo(object): 
    other = Bar 

class Bar(object): 
    other = Foo 

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

?

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

Есть ли способ решить это?

редактировать:

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

ответ

11

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

class Foo(object): 
    pass 

class Bar(object): 
    pass 

Foo.other = Bar 
Bar.other = Foo 

Я бы предпочел, чтобы избежать такой конструкции полностью, хотя.

+0

Убейте меня на несколько секунд ... :-) –

+0

Это используется с sqlalchemy для создания отношений между моделями, документ, кажется, указывает на такой дизайн (документ для фляги, если быть точным), это решение кажется странно. – sharvey

+1

AFAIK sqlalchemy использует строковые ссылки для внешних ключей и позволяет избежать этой проблемы таким образом, но, возможно, есть случаи, когда вам нужно это делать. – zvone

1

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

class Foo(object): 
    pass 

class Bar(object): 
    pass 

Foo.other = Bar 
Bar.other = Foo 

Если это свойство экземпляра, которые вы после, то ответ aaronasterling более уместен.

+1

Я обновлю вопрос. Извините, если он был расплывчатым. – sharvey

Смежные вопросы