Ссылки на классы в Python - PullRequest
       8

Ссылки на классы в Python

2 голосов
/ 12 ноября 2009

Я немного беспокоюсь о Python (использую для движка приложения). Я довольно новичок в этом (больше привык к Java), но я наслаждался .... до сих пор.

Следующее не будет работать!

class SomeClass(db.Model):
  item = db.ReferenceProperty(AnotherClass)

class AnotherClass(db.Model):
  otherItem = db.ReferenceProperty(SomeClass)

Насколько я знаю, кажется, нет способа заставить это работать. Извините, если это глупый вопрос. Надеюсь, если это так, я получу быстрый ответ.

Заранее спасибо.

Ответы [ 2 ]

6 голосов
/ 12 ноября 2009

Одним из способов просмотра ключевого слова «класс» в Python является простое создание новой именованной области во время первоначального выполнения вашего скрипта. Таким образом, ваш код выдает NameError: name 'AnotherClass' не определено исключение, поскольку Python еще не выполнил строку class AnotherClass(db.Model):, когда он выполняет строку self.item = db.ReferenceProperty(AnotherClass).

Самый простой способ исправить это: переместить инициализации этих значений в метод класса __init__ (имя Python для конструктора).

class SomeClass(db.Model):
  def __init__(self):
    self.item = db.ReferenceProperty(AnotherClass)

class AnotherClass(db.Model):
  def __init__(self):
    self.otherItem = db.ReferenceProperty(SomeClass)
1 голос
/ 12 ноября 2009

Если вы имеете в виду, что это не будет работать, потому что каждый класс хочет сослаться на другой, попробуйте это:

class SomeClass(db.Model):
  item = None

class AnotherClass(db.Model):
  otherItem = db.ReferenceProperty(SomeClass)

SomeClass.item = db.ReferenceProperty(AnotherClass)

Он конфликтует с какой-то магией метакласса, если она есть ... стоит попробовать.

...