为什么这些输入在Python中处理不同? __init__变量与参数。

时间:2014-07-09 01:48:48

标签: python python-2.7

我的问题与下面代码中的NotTrigger类有关。 evaluate方法将触发器和故事作为输入,两者都是先前定义的对象。为什么评估方法会以不同的方式对待它们,即为什么触发'变量在NotTrigger的init方法中初始化,而“故事”#变量被作为evaluate方法的参数?为什么不能同时触发'和故事'输入被作为评估方法的参数?这是麻省理工学院在线python课程的一个问题,当我尝试对待它们时,我收到一个错误。

class Story(object): 
    def __init__(self, subject): 
        self.subject = subject 

    def getSubject(self): 
        return self.subject

class Trigger(object): 
    def evaluate(self, text): 
        return self.isWordIn(text.getSubject())

class NotTrigger(object): 
    def __init__(self, other): 
        self.trigger = trigger 

    def evaluate(self, story): 
        return not self.other.evaluate(story)

1 个答案:

答案 0 :(得分:0)

我认为你的问题是:当我们可以将所有参数传递给我们将要使用的方法时,为什么构造函数 - __init__在这里被用来设置状态?

在面向对象的编程中,您可以设置类将保留的状态,并在创建时使用它的整个生命周期。为了说明你可以实现setter,但想法是将你的状态封装在一个对象的实例中,并调用可以使用来自外部世界的参数访问该状态的方法。

因此,在这种情况下,初始化对象时会设置self.trigger,因为无论出于何种原因,该对象都是NotTrigger依赖的对象。这称为依赖注入 - 您应该始终尝试明确初始化类依赖关系时的概念,因为这比通过任意方法调用随时注入它们更容易理解和推理。 / p>

所以,如果我理解你的问题:为什么我们在课堂上设置状态而不是仅仅在我们打电话时传递我们需要的东西?因为否则我们就不需要类构造,以及它所持有的状态。

相关问题