0

我是这个网站和一般编程的新手,所以请不要对这个新手问题太苛刻。

正如这个问题的标题所说,我正在尝试用 Python 编写一个包含类的程序。这是一个应该在给定故事中找到单词的程序。这个故事有一个标题、一个 GUID、一个主题、一个摘要和一个链接。在这种情况下,我希望程序在故事的标题中找到单词。但是,我制作的应该可以解决问题的子类不能正常工作。这是我迄今为止尝试过的:

class NewsStory(object):
    def __init__(self,guid,title,subject,summary,link):
        self.guid = guid
        self.title = title
        self.subject = subject        
        self.summary = summary
        self.link = link
    def get_guid(self):
        return self.guid
    def get_title(self):
        return self.title
    def get_subject(self):
        return self.subject
    def get_summary(self):
        return self.summary
    def get_link(self):
        return self.link

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

class WordTrigger(object):
    def __init__(self,word):
        self.word = word
    def is_word_in(self,text): 
        #check if self.word is in text

        texter = text.lower()


        for char in texter:
            if char in str.punctuation : 
                char = ' '

        #text_List.append(char)
        text_List = text.split(' ')

        for string in text_List: 
            if self.word == string: 
                return True     
        return False

class TitleTrigger(WordTrigger):

    def evaluate(self,story):
        print "story:", story.title
        return self.is_word_in(story.title) 

然而,当我测试程序时,我得到以下失败:“当单词出现在标题中时,标题触发器未能触发。”

问题1:我做错了什么?

此外,我一般无法理解课程。

问题 2:您能否推荐一个关于 Python 类介绍的可访问参考资料?我尝试了一些资源,如 Python 文档、wikibooks 和教程点,但我并没有从这些资源中变得更加明智。你有“更好”的东西吗?这可以是任何东西:一本书、一个网站、一篇文章等等。

4

1 回答 1

0

首先,关于 Python 和面向对象编程的一些技巧:

  1. 最好将属性视为公共而不是使用 getter 和 setter。如果要更改类的实现,可以尝试使用properties
  2. 如果您想要有不会在类外使用的变量,请在变量名称处使用下划线:self._word = word
  3. 尝试在方法之间留空行。

我建议你阅读PEP 8

我看到您正在使用 str.punctuation,但 str 类型没有该属性。我认为您想使用该string模块:

import string
if char in string.punctuation:
    # do stuff

但是,我看到您没有使用那部分代码,并且您正在迭代拆分文本列表。我会做这样的事情:

def is_word_in(self, text):
    _text = text.lower()
    return self.word in _text.split(' ')

顺便说一句,我没有得到你之前说的那个错误。

于 2013-10-16T18:22:24.060 回答