好的,所以我一直在寻找一段时间,请原谅这可能是一个相当简单的问题,但无论我读了多少线程相同的错误类型,我都无法弄清楚我在做什么错误。我相信我在概念上遗漏了一些东西。
以下是代码:
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类并让它打印出一个字符串,而不使用里面定义的函数......我想这是一个愚蠢的事情。 我误解了它是如何运作的......
答案 0 :(得分:1)
您已将__init__
函数定义为接受两个参数lyrics
和feliz
。您只传递了一个参数,该参数似乎是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):