关于用类实现python程序

时间:2013-10-16 17:16:47

标签: python class

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

正如这个问题的标题所说,我正在尝试用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和教程点,但我没有从这些来源变得更加明智。你有“更好”的东西吗?这可以是任何东西:书籍,网站,文章等等。

1 个答案:

答案 0 :(得分:0)

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

  1. 最好将属性视为公共,而不是使用getter和setter。如果要更改类的实现,可以尝试使用properties
  2. 如果您想拥有不在课堂外使用的变量,请在变量名称处使用下划线:self._word = word
  3. 尝试在方法之间留空行。
  4. 我建议您阅读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(' ')
    

    顺便说一句,我没有收到你之前说过的错误。