class Song(object):
def _init_(self, lyrics):
self.lyrics = lyrics
def sing_me_a_song(self):
for line in self.lyrics:
print line
happy_bday = Song(["heyhey","hey"])
bulls_on_parade = Song(["They rally around the family","hey"])
happy_bday.sing_me_a_song()
bulls_on_parade.sing_me_a_song()
您好我正在使用learnpythonthehardway学习python。我在这段代码中收到错误,无法弄清楚我的错误。请指导我,我是Python的初学者
答案 0 :(得分:2)
你在课堂上缺少缩进。
您需要定义方法__init__
,而不是_init_
。
class Song(object):
def __init__(self, lyrics):
self.lyrics = lyrics
def sing_me_a_song(self):
for line in self.lyrics:
print line
Python对缩进很敏感。
答案 1 :(得分:1)
我不认为你错过了缩进,有可能在将代码复制到堆栈溢出时发生了问题。所以,我忽略了这些问题。
因此,让我们修复缩进并运行您的代码。
class Song(object):
def _init_(self, lyrics):
self.lyrics = lyrics
def sing_me_a_song(self):
for line in self.lyrics:
print line
happy_bday = Song(["heyhey","hey"])
bulls_on_parade = Song(["They rally around the family","hey"])
happy_bday.sing_me_a_song()
bulls_on_parade.sing_me_a_song()
我收到以下错误消息:
Traceback (most recent call last):
File "/home/ahsanul/Downloads/PythonThreads/threading2.py", line 26, in <module>
happy_bday = Song(["heyhey","hey"])
TypeError: object() takes no parameters
因此,您遇到的主要问题是定义__init__
。您正在撰写_init_
而不是__init__
。如果您知道它的目的,问题就会变得清晰。
__init__
。通过在类中编写__init__
,您实际上将覆盖默认类。
所以,你在lyrics
中添加了一个参数_init_
,这样你就可以在对象初始化时传递一个参数,对吗?
但是你的函数永远不会被调用,因为__init__
在初始化时被调用,而不是_init_
因此,每次都会调用默认的__init__
,它没有参数,在对象初始化时,总是会出错。
只需将_init_
更改为__init__
,您就会像我一样倾听这首甜美的小歌。
heyhey
hey
They rally around the family
hey