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>