Python类、实例变量和访问方法



我正在做一个Python类的问题集。我们被介绍给班级。我试图(A)创建一个类称为句子与一个单一的参数,字符串,并创建一个实例变量,将句子存储为字符串。(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())

把编程想象成打地鼠游戏。你必须不断地敲打这些虫子。您甚至可以在编写程序之前编写一系列测试来表达类的行为。有各种框架可以做到这一点,包括unittestnose,但最简单的是一系列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()时,您尝试调用对象linegetWords方法。你似乎认为lineSentence类型的对象,但事实并非如此。相反,line只是一个字符串类型的对象,因为这是您在脚本的第一行中分配给它的对象。

相反,您需要创建一个对象类型为Sentence的实例,如下所示:
sentence = Sentence(line)

然后你可以调用你在该类中定义的方法:

sentence.getWords()

正如其中一条注释中提到的,您的类的接口也存在问题。试着自己解决这些问题,或者在遇到问题时及时反馈。自己解决这类问题是你想要培养的技能的一部分。

class:

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)中的返回值。

这是一种方法。)

相关内容

  • 没有找到相关文章

最新更新