Python 中对 OOP 的更多混淆
More Confusion With OOP in Python
为什么我必须传递 x 的歌词才能打印为 4 而不是两个字符串?我终于理解了参数以及如何满足它们,但我不明白为什么我必须传递 x 的歌词才能打印为不同于 bulls_on_parade 和 happy_bday.[=12= 的内存地址以外的内容]
class Song():
def __init__(self, lyrics, x):
self.lyrics = lyrics
#self.x = x
def sing_me_a_song(self):
for line in self.lyrics:
print line
def print_x(self):
print x.lyrics
happy_bday = Song(["Happy birthday to you,",
"I don't want to get sued",
"So I'll stop right there"], 'x-value')
bulls_on_parade = Song(["They'll rally around the family",
"With pockets full of shells"], 'x-value')
happy_bday.sing_me_a_song()
bulls_on_parade.sing_me_a_song()
def lyrics(args):
pass
x = Song(lyrics= 4, x = lyrics)
x.print_x()
在这段代码中,您将全局名称 lyrics
定义为一个函数。
将 lyrics
作为 x = lyrics
传递给 x
的对象构造函数会将函数的地址传递给它(这不完全正确,但现在它会这样做)作为 [=16= 的值]参数。
lyrics = 4
不同,因为 Python 区分函数调用参数名称和变量名称。
def lyrics(args):
pass
x = Song(lyrics= 4, x = lyrics)
事实上,如果在您的代码中这样做:
x = Song(lyrics=lyrics)
print x.lyrics
您会看到类似这样的内容:
<function lyrics at 0x107b9d1b8>
为什么我必须传递 x 的歌词才能打印为 4 而不是两个字符串?我终于理解了参数以及如何满足它们,但我不明白为什么我必须传递 x 的歌词才能打印为不同于 bulls_on_parade 和 happy_bday.[=12= 的内存地址以外的内容]
class Song():
def __init__(self, lyrics, x):
self.lyrics = lyrics
#self.x = x
def sing_me_a_song(self):
for line in self.lyrics:
print line
def print_x(self):
print x.lyrics
happy_bday = Song(["Happy birthday to you,",
"I don't want to get sued",
"So I'll stop right there"], 'x-value')
bulls_on_parade = Song(["They'll rally around the family",
"With pockets full of shells"], 'x-value')
happy_bday.sing_me_a_song()
bulls_on_parade.sing_me_a_song()
def lyrics(args):
pass
x = Song(lyrics= 4, x = lyrics)
x.print_x()
在这段代码中,您将全局名称 lyrics
定义为一个函数。
将 lyrics
作为 x = lyrics
传递给 x
的对象构造函数会将函数的地址传递给它(这不完全正确,但现在它会这样做)作为 [=16= 的值]参数。
lyrics = 4
不同,因为 Python 区分函数调用参数名称和变量名称。
def lyrics(args):
pass
x = Song(lyrics= 4, x = lyrics)
事实上,如果在您的代码中这样做:
x = Song(lyrics=lyrics)
print x.lyrics
您会看到类似这样的内容:
<function lyrics at 0x107b9d1b8>