我正在研究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()
一个子类相同,只是一个子类在故事主题中寻找一个单词,而另一个子类则在摘要中寻找。这两个人通过自己的构造函数通过了测试,这看起来确实很奇怪。我可以根据需要添加测试代码,尽管如果问题只是该代码如何测试我的类的一个怪癖,我实际上并不需要知道那个怪癖是什么。对于将来的情况,我真的很想知道的是,如果子类(子类)没有定义自己的子类,子类是否会自动继承其超类构造函数,就像它们如何从超类继承其他方法一样。
我是否认为子类将在其子类中未定义的情况下自动继承其超类的构造函数是否正确?
是。Java中防止这种情况发生的问题是重载(即每个人都继承自Object
,因此每个人最终都会得到一个null构造函数)。在Python中这不是问题,因此我们可以继承构造函数。
我在TitleTrigger()中使用的构造函数与它的超类WordTrigger()中的构造函数完全相同,因此,为什么要在子类中定义它还是允许子类继承它,这又为什么呢?
除非我丢失了某些内容,否则不应该(为了减少代码重复)。
这两个人通过自己的构造函数通过了测试,这看起来确实很奇怪。
是的。在看不到更多代码/错误的情况下,我无法猜测出什么问题。而且,在这里使用类似乎有些过分了-一个函数就可以了。不是Java,因此我们不需要将所有内容包装在无用的OO层中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句