在我的课堂上,我们刚刚开始面向对象的Python(我们从学期开始就开始进行函数式编程)。
使用以下方法编写一个名为Sentence的新类: 一种
__init__
方法,它将句子的单个参数作为字符串,并将此字符串存储在属性中。假设句子没有标点符号。 一个get_words
方法,它返回句子中的单词数。提示:split
。 一种大写方法,它修改属性以确保首字母大写。什么都没有归还。提示:上限但仅限于第一个字符。
我对init方法部分感到困惑。 “将此字符串存储在属性中”是什么意思。
此外,与此hmwk任务无关,但为什么我们调用函数 init ?它有点像C编程中的“主要”功能(我来自C背景)。
答案 0 :(得分:2)
在Python中,您可以随时向对象添加attributes。例如:
class Sentence(object):
pass
sentence = Sentence()
sentence.the_string = "This is a sentence."
__init__
方法是在构造类的实例时调用的特殊方法。例如,Sentence()
最终调用__init__
而没有额外的参数。因为我没有定义任何__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.")
实际问题是将字符串存储在 property 而不是属性中。这几乎肯定不是你实际应该学习的内容的一部分,而是你的教师或教科书或教程编写者实际上并不熟悉Python的标志。 property
是一种在方法之上伪造正常属性的方式,您不应该在短时间内了解它。
答案 1 :(得分: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__
作为参数调用foo
的{{1}}方法。