Python类,实例变量和访问器方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python类,实例变量和访问器方法相关的知识,希望对你有一定的参考价值。
我正在研究Python类的问题集。我们正在介绍类。我试图(A)用一个参数,字符串创建一个名为Sentence的类,并创建一个将句子存储为字符串的实例变量。 (B)然后为类分配访问器方法:getSentence(将句子作为字符串返回),getWords(返回句子中的单词列表),getLength(返回句子中的字符数)和getNumWords(返回句子中的单词数量)。以下是我到目前为止所尝试的内容:
line = "This Tuesday is Election Day"
class Sentence:
def __init__(self, text, string, words, length, num):
self.text = sentence
self.string = str(self.text)
self.words = self.text.split()
self.length = len(self.text)
self.num = len(self.words)
def getSentence(self):
return self.string
def getWords(self):
return self.words
def getLength(self):
return self.length
def getNumWords(self):
return self.num
line.getWords()
感谢您的时间。
以下是有效的更新代码:
class Sentence:
def __init__(self, string):
self.astring = str(string)
def getSentence(self):
return self.astring
def getWords(self):
return (self.astring).split()
def getLength(self):
return len(self.astring)
def getNumWords(self):
return len(self.getWords())
string = Sentence("The Election is tomorrow")
print (string.getSentence())
print (string.getWords())
print (string.getLength())
print (string.getNumWords())
将编程视为一种打击鼹鼠的游戏。你必须继续捣乱。甚至在编写表达类应该如何表现的程序之前,您可以编写一系列测试。有这样做的各种框架,包括unittest
和nose
,但最简单的是一系列assert
语句。如果表达式不正确,他们所做的就是引发异常。
那么,让我们构建一些测试
class Sentence:
def __init__(self, text, string, words, length, num):
self.text = sentence
self.string = str(self.text)
self.words = self.text.split()
self.length = len(self.text)
self.num = len(self.words)
def getSentence(self):
return self.string
def getWords(self):
return self.words
def getLength(self):
return self.length
def getNumWords(self):
return self.num
line = "This Tuesday is Election Day"
assert Sentence(line), "can initialize"
assert Sentence(line).getSentence() == line, "can return sentence"
assert Sentence(line).getWords() == ['This', 'Tuesday', 'is',
'Election', 'Day'], "can return words"
# etc...
我跑了,我明白了
Traceback (most recent call last):
File "v.py", line 22, in <module>
assert Sentence(line), "can initialize"
TypeError: __init__() missing 4 required positional arguments: 'string', 'words', 'length', and 'num'
哎呀,那些参数是完全不需要的,所以我删除它们然后再次运行,我得到了
Traceback (most recent call last):
File "v.py", line 22, in <module>
assert Sentence(line), "can initialize"
File "v.py", line 3, in __init__
self.text = sentence
NameError: name 'sentence' is not defined
糟糕,参数名称不正确...继续这样做,直到一切正常。
好吧,这里有一些事情你似乎被误解了。
让我们开始吧:
当你做line.getWords()
时,你试着调用对象getWords
的line
方法。你似乎认为line
是Sentence
类型的对象但事实并非如此。相反,line
只是字符串类型的对象,因为这是您在脚本的第一行中分配给它的内容。
相反,你需要像这样创建一个对象类型Sentence
的实例:
sentence = Sentence(line)
然后,您可以调用在该实例上的类中定义的方法:
sentence.getWords()
正如其中一条评论中所提到的,您的班级界面也存在问题。如果您遇到问题,请尝试自行修复或报告确切问题。自己解决这些问题是你想要发展的技能组合的一部分。
一句话:
def __init__(self, string):
self.output = string
self.getSentence = string
self.getWords = string.split()
self.getLength = len(list(string))
self.getNumWords = len(string.split())
def __str__(self):
return str(self.output)
def getSentence(self):
self.output = self.getsentence
def getWords(self):
self.output = self.getWords
def getLength(self):
self.output = self.getLength
def getNumWords(self):
self.output = self.getNumWords
您需要在代码中使用def int。 getSentence,getWords,getLength,getNumWords只应该更新(所以你可以在int中返回)。你不需要也不想要那些def(s)中的回报。
这是一种方法。根据你的代码;)
以上是关于Python类,实例变量和访问器方法的主要内容,如果未能解决你的问题,请参考以下文章