2009-06-25 137 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是一個類時,你不能這樣做。 – 2009-06-25 21:31:50

+0

什麼是Y?另一類?不是一個對象?你爲什麼不用這個對象實例?你爲什麼試圖爲此使用類? – 2009-06-25 21:50:51

回答

4

沒有什麼錯的類定義運行(有限)代碼:

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

但是,你不能指X,因爲它尚未完全確定。

5

在python中,執行類代碼塊中定義的代碼,只有然後,這取決於不同的東西---就像在這個塊中定義的那樣---創建了一個類。所以,如果你想與關聯另一個類,你會寫:

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

# Register 
Y.register(X) 

而對於Django的這種行爲是沒有關係的。