我已经阅读了一些资料,但无法像我希望的那样完全理解这一点。我正在 LPTHW 教程中制作一个“选择你自己的冒险”游戏,这是完整的脚本:http://codepad.org/YWVUlHnU
我不明白的是以下内容:
class Game(object):
def __init__(self, start):
self.quips = [
"You died. Please try again.",
"You lost, better luck next time.",
"Things didn't work out well. You'll need to start over."
"You might need to improve your skills. Try again."
]
self.start = start
我知道我们正在创建一个类,但是为什么要定义
__init__
呢?稍后我会做类似 print self.quis[randint(0, len(self.quips)-1)]
之类的事情,它会打印 quips
中的四个字符串之一,但是为什么我不创建一个名为 quips
之类的函数呢? 最佳答案
当您调用 Game("central_corridor")
时,将创建一个新对象并使用该新对象作为第一个参数 (Game.__init__()
) 和 self
作为第二个参数调用 "central_corridor"
方法。由于您编写了 a_game = Game(...)
,因此您已分配 a_game
来引用该新对象。
此图可能使该过程更易于理解:
注意:__new__
方法由 Python 提供。它创建一个作为第一个参数给出的类的新对象。内置的 __new__
方法不会对其余参数执行任何操作。如果需要,您可以覆盖 __new__
方法并使用其他参数。__init__()
存在于您的程序中的实际原因是在您创建的 start
实例(您调用 Game
的实例)上设置 a_game
属性,以便对 a_game.play()
的第一次调用从您希望的位置开始。
你是对的 quips
。没有理由在 quips
中设置 __init__()
。您可以将其设为类属性:
class Game(object):
quips = ["You died. Please try again.",
"You lost, better luck next time.",
"Things didn't work out well. You'll need to start over."
"You might need to improve your skills. Try again." ]
def __init__(self, start):
self.start = start
关于python - __init__的目的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9318740/