Hey guys 現在、Zed Shawの"Learn Python the Hard Way"を完成させています。私は、学習者にゲームを作成するよう指示するExercise 43に苦労しています。
__init__
、play
、death
、およびゲーム内の各「部屋」のためのより多くの4:簡単にするために、私はクラスGame
といくつかの機能があり、前の演習を書き換えしようとしています。Pythonクラスの2つのファイル[難解なPythonの方法]
さまざまな条件でコードをコピーして変更することができましたが、コードを2つのファイルに分割しようとしました.1つのファイルがクラスPrincessRoom
をゲームの唯一の部屋とし、古いコードplay
とdeath
の大部分ex43princess.py
class PrincessRoom(object):
def __init__(self):
pass
def princess(self):
print "text here"
raw_input("> ")
if raw_input == 1:
return 'eat_it'
else:
return 'death'
def eat_it(self):
print "text here"
からex43.py
from sys import exit
from random import randint
from ex43princess import PrincessRoom
class Game(object):
def __init__(self, start):
self.quips = [
"You died. You suck.",
"Hey, you died. Look at that.",
"You lose. I win. End.",
]
self.start = start
def play(self):
next = self.start
while True:
print "\n--------"
room = getattr(self, next)
next = room()
def death(self):
print self.quips[randint(0, len(self.quips)-1)]
exit(1)
a_game = Game("princess")
a_game.play()
から
私は、コードを実行すると、ここで私が手にエラーがあります:
Traceback (most recent call last):
File "ex43-2.py", line 29, in <module>
a_game.play()
File "ex43-2.py", line 21, in play
room = getattr(self, next)
AttributeError: 'Game' object has no attribute 'princess'``
は、今私は、なぜにあまりにも固体ではありませんよ元のコードはa_game = Game("princess")
buで初期化されたa_game
でした私はそれが私にroom = getattr(self, next)
を使用している理由に直接関係していると確信しています。しかし、これは私の理解が衰えるところです。
メモリが提供されている場合、Game
オブジェクトがex43princess.py ...から適切に継承されていないように見えますか?
もし私がここで何が起こっているのか理解できるように助けてくれたら、私は非常に感謝しています。
ありがとうございます! ジョシュ
ここであなたのゲームクラスは新しい 'PrincessRoom'オブジェクトを作成していますか?それはプリンセスにアクセスしようとしているし、実際のオブジェクトではないストリングだから不平を言う。 –