请解释这个类,子类,异常代码

时间:2013-01-05 18:52:58

标签: python

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触发器并且它按预期工作,但我只能通过反复试验使它工作 - 我不知道'self'在这个课程中做了什么。

以下是我的想法:__init__是类的构造函数,因此类的任何实例在创建时都使用它。该类有两个属性(object1,object2),创建类时__init__告诉新实例这些新属性将被称为'object1'和'object2',因此它们被分配给self.object1等。

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

1 个答案:

答案 0 :(得分: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用作变量名,因为这会影响内置类。