类问题,__ init__参数不匹配

时间:2014-01-22 03:43:02

标签: python class

好的,所以我一直在寻找一段时间,请原谅这可能是一个相当简单的问题,但无论我读了多少线程相同的错误类型,我都无法弄清楚我在做什么错误。我相信我在概念上遗漏了一些东西。

以下是代码:

class Song(object):

    def __init__ (self, lyrics, feliz):
        self.lyrics = lyrics
        self.feliz = "feliz navidad, etc etc"

    def sing_me_a_song(self):
        for line in self.lyrics:
            print line

happy_bday = Song(["\n\nHappy birthday to you",
                "I don't want to get sued",
                "So I'll stop right there.\n\n\n"])

bulls_on_parade = Song(["They rally around the family",
                    "With pockets full of shells.\n"])

happy_bday.sing_me_a_song()

bulls_on_parade.sing_me_a_song()

songz = Song()
print songz.feliz()

这是我得到的错误:

Traceback (most recent call last):
  File "ex40.py", line 13, in <module>
    "So I'll stop right there.\n\n\n"])
TypeError: __init__() takes exactly 3 arguments (2 given)

我意识到这可能是愚蠢的,但我对此很感兴趣并且非常想要一些帮助。如果这意味着什么,这显然是来自LPTHW并且我编辑了第40课,如果我删除所有对feliz的引用,代码字就没问题,那就是我试图将我自己的变量添加到类Song中,然后将它打印出来结束。提前谢谢。


所以我可以通过添加以下内容来实现我的目标:

feliz_navidad = Song(["Feliz navidad",
                    "Feliz navidad",
                    "Prospero anos delicidad.\n"])

feliz_navidad.sing_me_a_song()

但是,除了使用定义的sing_me_a_song函数之外,没有其他方法可以让我使用它来打印字符串吗?

我试图引用Song类并让它打印出一个字符串,而不使用里面定义的函数......我想这是一个愚蠢的事情。 我误解了它是如何运作的......

2 个答案:

答案 0 :(得分:1)

您已将__init__函数定义为接受两个参数lyricsfeliz。您只传递了一个参数,该参数似乎是lyrics

从您的问题中不清楚您希望代码执行什么操作。如果您只想传递一个参数,只需从feliz的参数列表中删除__init__,这样就只有def __init__(self, lyrics)。现在,你根本没有使用feliz参数,所以它似乎没有任何用途。

我还建议您阅读the Python tutorial以掌握Python的基础知识。

答案 1 :(得分:0)

下面

happy_bday = Song(["\n\nHappy birthday to you",
            "I don't want to get sued",
            "So I'll stop right there.\n\n\n"])

您正在传递list[...],即1个参数。例外情况是 2 ,因为self被隐含地作为参数传递。但是您声明的__init__方法需要3

  • self
  • lyrics
  • feliz

我建议您删除feliz参数,因为无论您将哪些内容作为参数传递,您只需为feliz分配一个字符串"feliz navidad, etc etc"

def __init__ (self, lyrics):