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

标签 python class methods instance-variables accessor

我正在研究 Python 类(class)的问题集。我们正在被介绍给类(class)。我正在尝试 (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())

最佳答案

将编程视为打地鼠游戏。你必须不断地消灭这些错误。您甚至可以在编写程序之前编写一系列测试来表达类的行为方式。有多种框架可以执行此操作,包括 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

糟糕,参数名称不正确...继续这样做,直到一切正常。

关于Python 类、实例变量和访问器方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40453333/

相关文章:

python - TypeError: __init__() 采用 0 个位置参数,但给出了 1 个

python - 创建具有共享轴的 python seaborn 热图的 2x2 网格

python - 无法将数据推送到 Azure 事件中心

python - Python有有序集吗?

python - 为什么你要 'import' Python 标准库函数?

python - 必须使用 fibo_ 实例作为第一个参数调用未绑定(bind)的方法 f()(改为获取 classobj 实例)

actionscript-3 - 从函数参数动态实例化一个类型化的向量?

ruby-on-rails - 具有相同名称的类和模块 - 如何选择一个或另一个?

c# - 不包含静态 'Main' [但确实如此?]

java - 通过 Java ASM 调用私有(private)方法