我正在研究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()
类时,它会引发错误。我无法弄清楚出了什么问题所以我在解决方案代码中达到了顶峰,并且他们已经注释掉了构造函数,所以这就是我所做的并且工作正常。这给我留下了三个问题......
TitleTrigger()
中使用的构造函数与其超类WordTrigger()
中的构造函数完全相同,那么为什么我在子类中定义它还是允许子类继承它呢? ?WordTrigger()
的子类,它们与TitleTrigger()
相同,只是一个人在故事的主题中寻找一个单词而另一个在概要中查找。这两个用自己的构造函数很好地通过了测试,这看起来很奇怪。如果需要,我可以包含测试代码,但如果问题只是代码测试我的类的一个怪癖,我真的不需要知道那个怪癖是什么。对于将来的情况,我真正想知道的是,如果子类(子类)没有定义自己的类,子类是否自动继承它们的超类构造函数,就像它们如何从超类继承其他方法一样。
答案 0 :(得分:1)
我认为子类会自动继承是正确的 超级类的构造函数,如果它没有被定义 子类
是。 Java中阻止这种情况发生的问题是重载(即每个人都继承自Object
,因此每个人都会得到一个无效的构造函数)。在Python中不是问题,所以我们可以继承构造函数。
我在TitleTrigger()中使用的构造函数是完全相同的 在其超类WordTrigger()中的构造函数,为什么它会重要 我是在子类中定义它还是允许子类 继承它?
它不应该(除了减少代码重复之外),除非我遗漏了什么。
这两个用自己的构造函数传递测试就好了 看起来很奇怪。
是的。如果没有看到更多代码/错误,我无法猜出错误。此外,在这里使用类似乎有些过分 - 一个函数可以做得很好。不是Java,所以我们不需要将所有内容包装在无用的OO层中。