gpt4 book ai didi

python - Python 中 OOP 的混淆

转载 作者:行者123 更新时间:2023-11-30 23:13:53 25 4
gpt4 key购买 nike

我正在尝试用 Python 学习 OOP,但我对某些部分感到困惑。

class Song(object):

def __init__(self, lyrics):
self.lyrics = lyrics

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

def print_x(self):
print x

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

bulls_on_parade = Song(["They'll rally around the family",
"With pockets full of shells"])

happy_bday.sing_me_a_song()

bulls_on_parade.sing_me_a_song()

x = Song(4)

x.print_x()

print_x() 返回:

<__main__.Song object at 0x7f00459b4390>

而不是 4。所以我尝试将 x 添加到 __init__ 的参数中和print_x ,并将 print_x 中的 print x 更改为 print self.x功能加上添加 self.x = x 到 init,但它返回:

TypeError: __init__() takes exactly 3 arguments (2 given)

老实说,我不知道这里出了什么问题。但任何帮助都会对我最终理解 OOP 非常有益。

最佳答案

这不是一个 OOP 问题,而是一个范围问题。让我们看一下一个非常精简的版本。

class Song(object):
def __init__(self, lyrics):
self.lyrics = lyrics

def print_x(self):
print x

从这里我们实例化x(在本地范围内):

>>> x = Song(4)

现在,在我们做任何事情之前,让我们检查一下 x:

>>> print x.lyrics
4

原因是当您调用 Song(4) 时,值 4 根据其位置确定为歌词

当我们调用print_x时:

>>> x.print_x()
<__main__.Song object at 0x7f00459b4390> # Or some other memory address

原因是 Python 唯一识别的 x 是我们刚刚创建的本地 x

当我们重新开始并创建y时会发生什么:

>>> y = Song(4)
>>> print y.print_x ()
NameError: global name 'x' is not defined

不存在可打印的 x,并且会引发异常。

关于python - Python 中 OOP 的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29070040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com