2013-01-05 54 views
-1
class AndTrigger(Trigger): 
    def __init__(self,object1,object2): 
     self.object1 = object1 
     self.object2 = object2 
    def evaluate(self,object): 
     return self.object1.evaluate(self) and self.object2.evaluate(self) 

我實現了這個AND觸發器,它的工作原理與它應有的一樣,但我只能通過試驗和錯誤使它工作 - 我不知道什麼是什麼'自我'正在這個班上做。請解釋這個類,子類,例外代碼

下面是我認爲正在發生的事情:__init__是該類的構造函數,因此該類的任何實例在創建時都會使用它。這個類有兩個屬性(object1,object2),創建類時的__init__告訴新實例這些新屬性將被稱爲'object1'和'object2',因此它們被分配給self.object1等。

現在,這個評估函數應該可以防止Trigger中未實現的提升,但這並不是我沒有得到的。在這個評估函數中,它看起來像有兩個參數 - AndTrigger的實例和另一個對象。但evaluate()的定義中的這個另一個對象在哪裏?這對我來說只是一個難題,但它確實如此!

+2

在'評估'中根本沒有使用「對象」。它被忽略。 –

+4

如果您不知道「self」是什麼,您需要閱讀Python中的基本對象使用情況。另外,如果這就是你的對象,並且你不打算添加更多,這是一個經典的例子,讓你不需要一個對象 - 這是一個功能。 –

+1

另外,您的措辭很不明確 - 例如,您似乎將* aspect *用作* attribute *的同義詞。 –

回答

2

當您調用綁定成員函數時,會自動提供第一個參數(self)。它指的是函數被調用的對象。

爲說明起見,我們假設self.object1self.object2都是TriggerX類型。以下:

def evaluate(self, obj): 
    return self.object1.evaluate(self) and self.object2.evaluate(self) 

是那麼等同於:

def evaluate(self, obj): 
    return TriggerX.evaluate(self.object1, self) and TriggerX.evaluate(self.object2, self) 

我希望這將清除的東西了。

P.S.我從上下文懷疑是以下幾點:

def evaluate(self, obj): 
    return self.object1.evaluate(self) and self.object2.evaluate(self) 

應該

def evaluate(self, obj): 
    return self.object1.evaluate(obj) and self.object2.evaluate(obj) 

P.P.S.請不要使用object作爲變量名稱,因爲這會影響內置類。

+0

好吧,在聲明一個類時使用'object',例如:'class TriggerX(object):'創建一個「新風格」的類,所以我認爲我指的是同一個基類「object」方法。 –