我正在尝试使用 while 循环从另一个文件中的类调用函数,然后根据原始函数返回的内容更改要调用的函数。您可能会从“Learning Python the Hard Way”中认识到其中的一些内容。
我有两个文件:engine.py 和 rooms.py。Engine.py 包含 while 循环,该循环从 rooms.py 中名为“Rooms”的类中调用函数。
rooms.py 中的一个例子:
class Rooms(object):
def __init__(self): #add start as arg for one class game
from random import randint
from sys import exit
def princess_lives_here(self):
print "Cake"
eat_it = raw_input("1\n2\n3\?> ")
if eat_it == "1":
return 'death'
elif eat_it == "2":
return 'death'
elif eat_it == "3":
return 'gold_koi_pond'
else:
return 'death'
这是实际游戏的简单模型,以确保我可以让机制正常工作。'death' 和 'gold_koi_pond' 都是包含在类房间中的函数。
我有三个要比较的引擎样本。我将分别称它们为 1、2 和 3。
#1 作品:
class Engine(object):
def __init__(self, start):
self.start = start
def play(self):
next = self.start
while True:
g = Rooms()
room = getattr(Rooms, next)
next = room(g)
from rooms import Rooms
a = Engine("princess_lives_here")
a.play()
#2 作品:
class Engine(object):
def __init__(self, start):
self.start = start
def play(self):
next = self.start
while True:
next = getattr(Rooms, next)(Rooms())
from rooms import Rooms
a = Engine("princess_lives_here")
a.play()
#3 不起作用:
class Engine(object):
def __init__(self, start):
self.start = start
def play(self):
next = self.start
while True:
room = getattr(Rooms, next)
next = room()
from rooms import Rooms
a = Engine("princess_lives_here")
a.play()
我很难理解这三个选项之间的区别。这个比那个好吗?python 中到底发生了什么使 1 和 2 起作用,但不是 3?有没有更好的方法来完成我想做的事情?
此外,从 engine.py 运行 Rooms 时,不会导入 randint 和 exit。为什么是这样?
谢谢你的帮助!我愿意接受所有的建议和批评,而不仅仅是我感兴趣的问题。