Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python观察者模式_Python_Django - Fatal编程技术网

python观察者模式

python观察者模式,python,django,Python,Django,我是python新手,但在尝试实现observer模式的变体时遇到了一个难题 class X(models.Model): a = models.ForeignKey(Voter) b = models.CharField(max_length=200) # Register Y.register(X) 这似乎不起作用,因为它说X没有定义。有两件事是可能的: A) 有一种方法可以引用当前类(不是实例,而是类对象) B) 您甚至不能在方法之外运行代码。(我认为

我是python新手,但在尝试实现observer模式的变体时遇到了一个难题

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

    # Register 
    Y.register(X)
这似乎不起作用,因为它说X没有定义。有两件事是可能的:

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


B) 您甚至不能在方法之外运行代码。(我认为这几乎可以像静态构造函数一样工作-只运行一次)。

在类定义中运行(有限的)代码没有什么错:

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

但是,您不能引用X,因为它还没有完全定义。

在python中,执行类块中定义的代码,然后根据不同的情况(如在该块中定义的内容)创建类。因此,如果您想将一个类与另一个类关联起来,您可以编写:

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

# Register 
Y.register(X)

这种行为与django无关。

你真的打算在这门课上及格吗?我能理解,但这门课呢?除非register注册工厂,但您有一个组件注册表,这并不完全是观察者模式。在观察者模式中,Y会通知X一些事情,当X是一个类时,你不能做这些事情。Y是什么?另一节课?不是物体吗?为什么不为此使用对象实例?为什么要使用类来实现这一点?