2009-06-25 16 views
4

私のpythonに新しいですが、オブザーバーパターンのバリエーションを実装しようとしたとき、私はヒッチに実行しました。Pythonのオブザーバーパターン

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

    # Register 
    Y.register(X) 

これは、Xが定義されていないと言うので、動作するようには思えません。物事のカップルが可能です。

A)現在のクラス(インスタンスではなく、しかし、クラスオブジェクト)を参照する方法があります。

B)あなたも、メソッドの外のコードを実行することはできません。 (これは、静的なコンストラクタのように動作すると思っていました。

+1

あなたが本当にここで、クラスに合格しようとしていますか?私は理解するだろうが、そのクラスは?レジスタを登録するのではなく、コンポーネントレジストリを持っていなければ、それは正確なオブザーバーパターンではありません。オブザーバーのパターンでは、Yは物事をXに通知します。これは、Xがクラスである場合には実行できません。 –

+0

Yとは何ですか?別のクラス?オブジェクトではない?このためにオブジェクトインスタンスを使用していないのはなぜですか?なぜあなたはこれのためにクラスを使用しようとしていますか? –

答えて

4

クラス定義で実行されている(限られた)コードと間違って何もありません:それはまだ完全に定義されていないため

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

しかし、あなたはXを参照することはできませんが。

+0

意味があります。ありがとう – Daniel

5

Pythonでは、クラスブロックで定義されたコードが実行され、からまで、このブロックで定義されているように---クラスが作成されます。だから、あなたは別と1つのクラスを関連付けるしたい場合は、あなたが書いたと思います:

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

# Register 
Y.register(X) 

そして、この動作は、ジャンゴとは関係ありません。

関連する問題