Класс Python, определенный в том же файле, что и другой класс, – как вы получаете доступ к тому, который указан позже в файле?

Я очень новичок в Python, я считаю, что этот вопрос должен быть легко ответить.

Моя проблема упрощена …

У меня есть 2 класса в классе A и классе B. Класс A определяется сначала в файле, а класс B определяется вторым.

class A ... class B ... 

Как получить доступ к классу B с классом A?

 class A something = B class B somethingElse = A 

Вот фактический код, который я пытаюсь исправить

 class FirstResource(_ModelResource): class Meta(_Meta): queryset = First.objects.all() resource_name = 'first' allowed_methods = ['get','put'] filtering = { 'a': ALL_WITH_RELATIONS, 'b': ALL_WITH_RELATIONS, 'c': ALL_WITH_RELATIONS, } ordering = ['apt'] # this is the line that would fix everything second = fields.ForeignKey(SecondResource, 'second', null=True, blank=True, default=None, full=True) ... class SecondResource(_ModelResource): class Meta(_Meta): queryset = Second.objects.all() resource_name = 'second' execute_methods = ['get', 'post'] filtering = { 'name': ['exact'], 'leader': ['exact'], } super = fields.ForeignKey(FirstResource, 'super', null=True, blank=True, default=None, full=True) leader = fields.ForeignKey(FirstResource, 'leader', null=True, blank=True, default=None, full=True) ... 

Без предварительного объявления в Python я действительно не уверен, как решить эту проблему. Первый в models.py имеет ForeignKey of Second, а Second имеет 2 внешних ключа First.

Перемещение A ниже B не решает проблему, так как B также нуждается в A. Я не писал код, который я просто пытаюсь исправить – мне нужен «второй» внешний ключ, когда я делаю «get» для ресурса в обоих классах.

4 Solutions collect form web for “Класс Python, определенный в том же файле, что и другой класс, – как вы получаете доступ к тому, который указан позже в файле?”

Чтобы получить доступ к B , вы должны сначала определить B

Если вы хотите получить доступ к B при определении A , вам нужно переместить его выше A в файл.

Если вы хотите получить доступ к B при вызове методов в A , вам не нужно ничего делать: к моменту вызова метода A интерпретатор выполнил все определения.

Когда python находит объявление класса, он создает новую область и выполняет код внутри класса в этом кодовом блоке. Это означает, что все переменные класса создаются при объявлении класса.

Теперь, если у вас есть два класса:

 class A: something = B class B: pass 

Python выполнит something = B перед созданием класса B и, таким образом, даст значение NameError .

Вы можете избежать этого очень просто:

 class A: something = None class B: pass A.something = B 
 class A: def __init__(self): print "In A" class B: def __init__(self): a = A() print "In B" b = B() 

Я думаю, ты хочешь чего-то подобного.

Таким образом, ответ заключался в использовании qoutes

 B = fields.ForeignKey('api.resources.B', 'B') 
  • Как обновить экземпляр модели Django с запросом.POST, если POST является вложенным массивом?
  • django удалить unicode из результата запроса
  • сохранить часовой пояс в моделях Django
  • Какой простой способ реализовать одно редактирование в списке list_editable в django admin?
  • Лучший способ добавить общую дату date_added, date_modified для многих моделей в Django
  • Django / python проверяет JSON
  • Django South - превращение поля null = True в поле null = False
  • Значение по умолчанию для поля в модели Django
  • Python - лучший язык программирования в мире.