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