为什么这个Python类代码会导致语法错误?

时间:2015-09-18 04:25:23

标签: python class

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的初学者

2 个答案:

答案 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