Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用类实现python程序_Python_Class - Fatal编程技术网

用类实现python程序

用类实现python程序,python,class,Python,Class,我对这个网站和编程都是新手,所以请不要对这个新手问题太苛刻 正如这个问题的标题所说,我正试图用Python编写一个包含类的程序。这是一个在给定故事中查找单词的程序。这个故事有一个标题、一个GUID、一个主题、一个摘要和一个链接。在本例中,我希望程序在故事的标题中查找单词。但是,我创建的子类不能正常工作。以下是我迄今为止所做的尝试: class NewsStory(object): def __init__(self,guid,title,subject,summary,link):

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

正如这个问题的标题所说,我正试图用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和教程点,但从这些源代码中我并没有变得更聪明。你有更好的吗?这可以是任何东西:一本书,一个网站,一篇文章,等等

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

  • 最好将属性视为公共属性,而不是使用getter和setter。如果要更改类的实现,可以尝试使用
  • 如果您想要在类外不使用的变量,请在变量名处使用下划线:
    self.\u word=word
  • 尝试在方法之间留下空行
  • 我建议你读一下这本书

    我看到您正在使用str.标点符号,但str类型没有该属性。我想您想使用
    字符串
    模块:

    import string
    if char in string.punctuation:
        # do stuff
    
    但是,我发现您没有使用这部分代码,而是在迭代拆分文本列表。我会这样做:

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

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

    有关类的快速资源,请浏览这里:你到底是如何运行代码的?我看到了很多类,但是没有设置它们/加载数据/调用它们。错误消息不是由您发布的任何代码生成的,因此很难说出错误的含义。你是如何测试代码的?似乎有一个脚本使用了您定义的类。另外,还有一点风格提示:您实际上不需要编写getter和setter方法,例如
    obj.get_-link()
    obj.get_-guid()
    ,等等。您可以通过执行
    obj.link
    obj.guid>直接操作属性。(在其他语言中,情况未必如此,但在Python中显式的getter和setter方法是不必要的)我不同意您关于私有属性的建议。Python从不强制任何形式的访问控制,所以好的风格是始终将实例变量视为公共变量,并且从不编写getter和setter(因为无论如何都无法强制客户机使用它们)。如果有一天您需要在包的表面上更改类的实现,那么您可以继续使用来支持旧的API。