2014-01-22 44 views
1

好的,所以我一直在寻找一段时间,请原谅这可能是一个相当简单的问题,但不管我读了多少个线程的相同错误类型,我可以'弄清楚我做错了什么。我相信我在概念上错过了一些东西。类问题,__init__参数不匹配

下面是代码:

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函数?

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

+0

你的'__init__'方法要求两个参数('self'隐式传递),但你只给它一个。你永远不会使用'feliz'。 – Blender

回答

1

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

从你的问题中不清楚你想要你的代码做什么。如果您只想传递一个参数,只需从__init__的参数列表中删除feliz,因此它只是def __init__(self, lyrics)。现在,你根本没有使用这个参数,所以它似乎没有任何目的。

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

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): 
+0

歌词旨在成为一个列表。看看他的代码sing_me_a_song – Lalaland