0

在我的课上,我们刚刚开始学习面向对象的 Python(我们从学期开始就在做函数式编程)。

使用以下方法编写一个名为 Sentence 的新类: 将句子__init__的单个参数作为字符串并将此字符串存储在属性中的方法。假设句子没有标点符号。get_words返回句子中单词数的方法。提示:split。修改属性以确保首字母大写的大写方法。什么都没有返回。提示:上,但仅限于第一个字符。

我对 init 方法部分感到困惑。“将此字符串存储在属性中”是什么意思。

此外,与这个 hmwk 分配无关,但为什么我们调用函数init?它有点像 C 编程中的“主要”函数吗(我来自 C 背景)。

4

2 回答 2

2

在 Python 中,您可以随时为对象添加属性。例如:

class Sentence(object):
    pass

sentence = Sentence()
sentence.the_string = "This is a sentence."

__init__方法是在构造类的实例时调用的特殊方法。例如,Sentence()最终调用__init__没有额外的参数。因为我没有定义 any __init__,所以我得到了默认值,它什么都不做。但是现在让我们定义一个,并给它一个额外的参数:

class Sentence(object):
    def __init__(self, the_sentence):
        pass

sentence = Sentence("This is a sentence.")
sentence.the_string = "This is a different sentence."

现在,唯一剩下的就是将该属性创建移动到__init__方法中:

class Sentence(object):
    def __init__(self, the_sentence):
        self.the_string = the_sentence

sentence = Sentence("This is a sentence.")

实际问题是关于将字符串存储在属性而不是属性中。这几乎肯定不是你真正应该学习的内容的一部分,而是表明你的讲师、教科书或教程作者实际上并不十分了解 Python。Aproperty是一种在方法之上伪造普通属性的方法,您不应该很快学习。

于 2013-11-01T01:43:05.830 回答
1

“将此字符串存储在属性中”表示类的属性,如下所示:

class Sentence(object):
    def __init__(self, sentence):
        self.my_sentence = sentence

在属于此类的任何函数(并self作为参数)中,包括__init__,您可以将其my_sentence称为“ self.my_sentence”。

Python 的“特殊”函数都以 . 为前缀和后缀__。调用该函数是__init__因为它是该类的初始化程序,在您实例化一个类对象时调用。例如,如果您这样做了Sentence(foo, bar),您将使用和作为参数调用Sentence' __init__方法。foobar

于 2013-11-01T01:26:35.260 回答