我已经阅读了一些资料,但无法像我希望的那样完全理解这一点。我正在 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/

10-11 04:53