-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__クラスのコンストラクターなので、クラスのインスタンスは作成時にこれを使用します。クラスには2つの属性(object1、object2)があり__init__、クラスが作成されると、これらの新しい属性は「object1」および「object2」と呼ばれるため、self.object1などに割り当てられることを新しいインスタンスに通知します。

さて、この評価関数は、トリガーで実装されていないレイズを防ぐことになっていますが、それは私が得られないものではありません。このevaluate関数では、AndTriggerのインスタンスと別のオブジェクトの2つの引数があるように見えます。しかし、この他のオブジェクトは?の定義のどこにありevaluate()ますか?これがどのように機能するかは私にはパズルですが、実際に機能します。

4

1 に答える 1

2

バインドされたメンバー関数を呼び出すと、最初の引数(self)が自動的に提供されます。関数が呼び出されるオブジェクトを指します。

説明のために、との両方がタイプであるself.object1と仮定しましょう。以下:self.object2TriggerX

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)

これで問題が解決することを願っています。

PS私は、次のような文脈から推測します。

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)

objectPPS組み込みクラスをシャドウするため、変数名として使用しないでください。

于 2013-01-05T18:58:14.437 に答える