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()
定义中的另一个对象在哪里?这对我来说只是一个难题,但它确实如此!
答案 0 :(得分:2)
当您调用绑定成员函数时,会自动提供第一个参数(self
)。它指的是调用函数的对象。
为了便于说明,我们假设self.object1
和self.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
用作变量名,因为这会影响内置类。