我已经阅读了一些内容,但仍无法完全理解。我正在使用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
类的实例,那么我使用的任何属性将决定游戏从哪里开始。因此,如果我想让游戏从Game
类中的laser_weapon_armory
函数开始,我会这样做:a_game = game("laser_weapon_armory")
,然后a_game.play()
。__init__
与此有什么关系? - ZCJGame("laser_weapon_armory")
时,实际上发生的是创建了一个新的Game
实例,我们称其为obj
(在此时实际上没有名称),然后Python 自动 运行Game.__init__(obj, "laser_weapon_armory")
并返回obj
(最终分配给名称a_game
)。__init__
中设置了obj.start
为"laser_weapon_armory"
。当你运行a_game.play()
时,实际上发生的是Python运行Game.play(a_game)
-self
参数用a_game
填充,因此当你调用a_game.play()
时,self.start
是"laser_weapon_armory"
。 - Steven T. Snyder__new__
方法被传递的参数与稍后传递给__init__
的参数相同,而不仅仅是类。 - jsbueno