Python 观察者模式

4 投票
2 回答
1049 浏览
提问于 2025-04-15 12:30

我刚开始学Python,但在尝试实现观察者模式的变种时遇到了一些问题。

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

    # Register 
    Y.register(X)

这个代码似乎不太对,因为它说X没有定义。可能有几个原因:

A) 有一种方法可以引用当前的类(不是实例,而是类对象本身)。

B) 你甚至不能在方法外面运行代码。(我原以为这可能像静态构造函数一样,只会运行一次)。

2 个回答

5

在Python中,类里面写的代码会先执行,然后根据一些情况,比如这个类里面定义了什么,才会创建出这个类。所以如果你想把一个类和另一个类联系起来,你可以这样写:

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

# Register 
Y.register(X)

而这种行为和Django没有关系。

4

在类的定义中运行(有限的)代码是没有问题的:

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

不过,你不能引用X,因为它还没有完全定义好。

撰写回答