构造函数是否在python中继承

时间:2014-06-20 18:03:27

标签: python inheritance constructor python-2.5

我正在研究MIT 6.00 OCW问题集之一,我有以下代码......

class Trigger(object):
    def evaluate(self, story):
        """
        Returns True if an alert should be generated
        for the given news item, or False otherwise.
        """
        raise NotImplementedError

# Whole Word Triggers
# Problems 2-5

# WordTrigger

class WordTrigger(Trigger):
    def __init__(self, word):
        self.word = word

    def is_word_in(self, text):
        word = self.word.lower()
        text = text.lower()

        #Remove punc and split text
        for ch in string.punctuation:
            text = text.replace(ch, ' ')
        splitText = text.split(' ')

        #Check if word is in text
        return word in splitText


# TitleTrigger

class TitleTrigger(WordTrigger):
##    def __init__(self, word):
##        self.word = word

    def evaluate(self, story):
        return self.is_word_in(story.get_title())

我最初没有在TitleTrigger()中注释掉构造函数,但是当我运行提供的测试脚本时,当测试实用程序试图调用我的TitleTrigger()类时,它会引发错误。我无法弄清楚出了什么问题所以我在解决方案代码中达到了顶峰,并且他们已经注释掉了构造函数,所以这就是我所做的并且工作正常。这给我留下了三个问题......

  1. 我是否认为如果未在子类中定义子类将自动继承其超类的构造函数?看来这就是我发表评论时发生的事情。
  2. 我在TitleTrigger()中使用的构造函数与其超类WordTrigger()中的构造函数完全相同,那么为什么我在子类中定义它还是允许子类继承它呢? ?
  3. 我还有两个WordTrigger()的子类,它们与TitleTrigger()相同,只是一个人在故事的主题中寻找一个单词而另一个在概要中查找。这两个用自己的构造函数很好地通过了测试,这看起来很奇怪。
  4. 如果需要,我可以包含测试代码,但如果问题只是代码测试我的类的一个怪癖,我真的不需要知道那个怪癖是什么。对于将来的情况,我真正想知道的是,如果子类(子类)没有定义自己的类,子类是否自动继承它们的超类构造函数,就像它们如何从超类继承其他方法一样。

1 个答案:

答案 0 :(得分:1)

  

我认为子类会自动继承是正确的   超级类的构造函数,如果它没有被定义   子类

是。 Java中阻止这种情况发生的问题是重载(即每个人都继承自Object,因此每个人都会得到一个无效的构造函数)。在Python中不是问题,所以我们可以继承构造函数。

  

我在TitleTrigger()中使用的构造函数是完全相同的   在其超类WordTrigger()中的构造函数,为什么它会重要   我是在子类中定义它还是允许子类   继承它?

它不应该(除了减少代码重复之外),除非我遗漏了什么。

  

这两个用自己的构造函数传递测试就好了   看起来很奇怪。

是的。如果没有看到更多代码/错误,我无法猜出错误。此外,在这里使用类似乎有些过分 - 一个函数可以做得很好。不是Java,所以我们不需要将所有内容包装在无用的OO层中。