使用继承在 Python 中由另一个提供一个 class
Using inheritance to provide one class by another in Python
我正在努力成为一名自学成才的开发人员,所以当我不了解课程中的任务时,没有人可以问我。问题是关于继承。
给定结构
我必须实现一些 classes 作为监视新闻的程序。
我得到了基础摘要 class 触发器
class Trigger(object):
def evaluate(self, story):
"""
Returns True if an alert should be generated
for the given news item, or False otherwise.
"""
# DO NOT CHANGE THIS!
raise NotImplementedError
然后我必须根据该方案实施其他 classes。我是这样做的:
class PhraseTrigger(Trigger):
def __init__(self, trigger, story):
self._trigger = trigger
self._story = story
def is_phrase_in(self):
phrase_to_match = r"((\W)+|^)"
for i in self._trigger.split():
phrase_to_match += i
if (i != self._trigger.split()[-1]):
phrase_to_match += r"(\W)+"
else:
phrase_to_match += r"((\W)+|$)"
# print(phrase_to_match) # delete after debugging
scheme_to_match = re.compile(phrase_to_match, re.IGNORECASE)
mo = scheme_to_match.search(self._story)
if (mo != None):
return True
else:
return False
def evaluate(self, story):
"""
Returns True if an alert should be generated
for the given news item, or False otherwise.
"""
if is_phrase_in(self):
return True
else:
return False
除了 Not-、And- 和 OrTrigger,我都做了。
接下来有人说“NotTrigger 应该通过反转另一个触发器的输出来产生它的输出。NOT 触发器应该将这个另一个触发器作为其构造函数的参数”。如何将另一个 class 添加到 NotTrigger 的 init 方法?或者我没有完全理解这个想法。任何建议将被认真考虑。
P.S。抱歉文字太长,我的英语不好(这是我的第二语言)。
这意味着 NotTrigger.__init__
将 Trigger
的 实例 作为其参数。一旦你有了它,你就可以根据另一个触发器的 evaluate
方法来实现 NotTrigger.evaluate
。像
class NotTrigger:
def __init__(self, trigger):
self.trigger = trigger
def evaluate(self, story):
if self.trigger.evaluate(story):
...
else:
...
请注意,应该采用 story
参数的不是 __init__
,而是 evaluate
。如果 Trigger
包装另一个 Trigger
(或多个),evaluate
的工作是确保调用包装的 Trigger
的 evaluate
方法在适当的时候 story
。
让我们从 NotTrigger
的简单实现开始。以下是您如何定义接受另一个触发器的初始化程序(技术上不是构造函数):
class NotTrigger:
def __init__(self, trigger):
self.trigger = trigger
现在 evaluate
方法应该很简单了:
def evaluate(self, story):
return not self.trigger.evaluate(story)
希望您现在看到了实施 PhraseTrigger
时遇到的一些问题:
PhraseTrigger
不应接受另一个触发器作为 __init__
的参数,也不应接受故事。
PhraseTrigger
不应该直接实现 evaluate
:这取决于 child 类.
PhraseTrigger
应该接受要搜索的短语。
PhraseTrigger
应该提供一种方法 is_phrase_in(self, text)
在 text
中搜索 self.phrase
。 Child 类 将确定要为 text
. 传递的内容
我正在努力成为一名自学成才的开发人员,所以当我不了解课程中的任务时,没有人可以问我。问题是关于继承。
给定结构
我必须实现一些 classes 作为监视新闻的程序。 我得到了基础摘要 class 触发器
class Trigger(object):
def evaluate(self, story):
"""
Returns True if an alert should be generated
for the given news item, or False otherwise.
"""
# DO NOT CHANGE THIS!
raise NotImplementedError
然后我必须根据该方案实施其他 classes。我是这样做的:
class PhraseTrigger(Trigger):
def __init__(self, trigger, story):
self._trigger = trigger
self._story = story
def is_phrase_in(self):
phrase_to_match = r"((\W)+|^)"
for i in self._trigger.split():
phrase_to_match += i
if (i != self._trigger.split()[-1]):
phrase_to_match += r"(\W)+"
else:
phrase_to_match += r"((\W)+|$)"
# print(phrase_to_match) # delete after debugging
scheme_to_match = re.compile(phrase_to_match, re.IGNORECASE)
mo = scheme_to_match.search(self._story)
if (mo != None):
return True
else:
return False
def evaluate(self, story):
"""
Returns True if an alert should be generated
for the given news item, or False otherwise.
"""
if is_phrase_in(self):
return True
else:
return False
除了 Not-、And- 和 OrTrigger,我都做了。 接下来有人说“NotTrigger 应该通过反转另一个触发器的输出来产生它的输出。NOT 触发器应该将这个另一个触发器作为其构造函数的参数”。如何将另一个 class 添加到 NotTrigger 的 init 方法?或者我没有完全理解这个想法。任何建议将被认真考虑。 P.S。抱歉文字太长,我的英语不好(这是我的第二语言)。
这意味着 NotTrigger.__init__
将 Trigger
的 实例 作为其参数。一旦你有了它,你就可以根据另一个触发器的 evaluate
方法来实现 NotTrigger.evaluate
。像
class NotTrigger:
def __init__(self, trigger):
self.trigger = trigger
def evaluate(self, story):
if self.trigger.evaluate(story):
...
else:
...
请注意,应该采用 story
参数的不是 __init__
,而是 evaluate
。如果 Trigger
包装另一个 Trigger
(或多个),evaluate
的工作是确保调用包装的 Trigger
的 evaluate
方法在适当的时候 story
。
让我们从 NotTrigger
的简单实现开始。以下是您如何定义接受另一个触发器的初始化程序(技术上不是构造函数):
class NotTrigger:
def __init__(self, trigger):
self.trigger = trigger
现在 evaluate
方法应该很简单了:
def evaluate(self, story):
return not self.trigger.evaluate(story)
希望您现在看到了实施 PhraseTrigger
时遇到的一些问题:
PhraseTrigger
不应接受另一个触发器作为__init__
的参数,也不应接受故事。PhraseTrigger
不应该直接实现evaluate
:这取决于 child 类.PhraseTrigger
应该接受要搜索的短语。PhraseTrigger
应该提供一种方法is_phrase_in(self, text)
在text
中搜索self.phrase
。 Child 类 将确定要为text
. 传递的内容