образец наблюдателя питона - PullRequest
4 голосов
/ 26 июня 2009

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

class X(models.Model):
    a = models.ForeignKey(Voter)
    b = models.CharField(max_length=200)

    # Register 
    Y.register(X)

Кажется, это не работает, потому что говорит, что X не определен. Возможны несколько вещей:

A) Существует способ ссылки на текущий класс (не экземпляр, а объект класса).

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

Ответы [ 2 ]

5 голосов
/ 26 июня 2009

В Python выполняется код, определенный в блоке класса, и только , затем , в зависимости от различных вещей - например, того, что было определено в этом блоке - класс создается. Поэтому, если вы хотите связать один класс с другим, вы должны написать:

class X(models.Model):
    a = models.ForeignKey(Voter)
    b = models.CharField(max_length=200)

# Register 
Y.register(X)

И это поведение не связано с Джанго.

4 голосов
/ 26 июня 2009

Нет ничего плохого в выполнении (ограниченного) кода в определении класса:

class X(object):
  print("Loading X")

Однако вы не можете ссылаться на X, поскольку он еще не полностью определен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...