2016-05-23 6 views
0

У меня есть следующая вложенная структура:Как ссылаться другим вложенным класс внутри вложенного класса

from peewee import * 

class Parent: 
    ... 
    class A: 
     name = TextField() 

    class B: 
     from_A = ForeignKeyField(A) 

Я пытаюсь ссылаться на класс А в ForeignKeyField в классе В, но оба A и Parent.A возвращает имя не найденная ошибка. Каков правильный способ ссылки на класс A из класса B? Это возможно?

+0

не использовать вложенные классы. – Daniel

+0

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

+0

Может быть представлен [mcve]? – boardrider

ответ

2

В момент определения класса B, класс Родитель не полностью определена, поэтому он не может быть использован: во время определения, вы можете использовать только:

  • глобальные переменные
  • переменные, принадлежащие к элементу

Но у вас нет доступа к переменным, определенным в закрывающем блоке, будь они классами или нет.

Так вы остались только два варианта:

  • определить класс B вне родителя
  • инициализировать элемент во время выполнения после того, как все было определено (в том смысле, время выполнения начинается немедленно конец class Parent block`):

    class Parent: 
        ... 
        class A: 
         name = TextField() 
    
        class B: 
         ... 
    
    Parent.B.from_A = ForeignKeyField(Parent.A)