-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 触发器,它按预期工作,但我只能通过反复试验才能使其工作——我不知道“自我”在这门课上做什么。

这是我认为正在发生的事情: the__init__是类的构造函数,因此该类的任何实例在创建时都会使用它。该类有两个属性(object1,object2),__init__创建类时告诉新实例这些新属性将被称为“object1”和“object2”,因此它们被分配给 self.object1 等。

现在,这个评估函数应该防止触发器中未实现的加注,但这不是我没有得到的。在这个评估函数中,它看起来有两个参数——AndTrigger 的实例和另一个对象。但是 的定义中的另一个对象在evaluate()哪里?这对我来说只是一个谜,它是如何工作的,但它确实如此!

4

1 回答 1

2

当您调用绑定的成员函数时,self会自动提供第一个参数 ( )。它指的是调用函数的对象。

为了便于说明,我们假设self.object1self.object2都是 type 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)

我希望这能解决问题。

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)

PPS 请不要object用作变量名,因为这会影响内置类。

于 2013-01-05T18:58:14.437 回答