我正在努力成為一名自學成才的開發人員,所以當我不理解課程中的任務時,我沒有人可以問。問題是關于繼承的。給定結構
我必須將一些類作為一個程式來監控新聞。我得到了基礎抽象類 Trigger
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
然后我必須相應地實作其他類的方案。我是這樣做的:
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 觸發器應該將此另一個觸發器作為其建構式的引數”。如何在 NotTrigger的init方法中添加另一個類?或者我沒有完全理解這個想法。任何建議將被認真考慮。PS 對不起,長文本和我糟糕的英語(這是我的第二語言)。
uj5u.com熱心網友回復:
讓我們從一個簡單的實作開始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:這取決于子類。PhraseTrigger應該接受要搜索的短語。PhraseTrigger應該提供一種方法is_phrase_in(self, text)來搜索self.phraseintext。子類將決定傳遞什么text。
uj5u.com熱心網友回復:
這意味著NotTrigger.__init__需要一個實體作為Trigger它的引數。一旦你有了它,你就可以NotTrigger.evaluate根據另一個觸發器的evaluate方法來實作。就像是
class NotTrigger:
def __init__(self, trigger):
self.trigger = trigger
def evaluate(self, story):
if self.trigger.evaluate(story):
...
else:
...
請注意,它不__init__應該帶story引數,只有evaluate. 如果 aTrigger包裝了另一個Trigger(或多個),它的evaluate作業是確保在適當的時候呼叫被包裝Trigger的evaluate方法。story
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/428628.html
