2015-04-02 59 views
-2

我试图在Python中使用类来制作游戏,我偶然发现了这个错误。游戏引擎的代码是:AttributeError:'引擎'对象没有属性'player1'

class Engine(object): 
players = {"Arjuna":Arjuna("Shivam")} 
def __init__(self): 
    return 

def seek_player(self,input): 
    player1 = self.players.get(input) 
    player2 = Player("Shivam") 
    self.attack(player1, player2) 
    return player1, player2 

def attack(self, player1, player2): 
    attack = raw_input("Choose your attack: ") 
    chosen_one = self.player1.moves.get(attack) 
    print "Your attack power is", chosen_one 
    new_health = self.player2.health() - chosen_one 
    print new_health 
    return 

a = Engine() 
input = raw_input("Choose your player: ") 
a.seek_player(input) 

我这样做,以后的步骤得到这个错误。

Traceback (most recent call last): 
    File "class.py", line 62, in <module> 
    a.seek_player(input) 
    File "class.py", line 49, in seek_player 
    self.attack(player1, player2) 
    File "class.py", line 54, in attack 
    chosen_one = self.player1.moves.get(attack) 
AttributeError: 'Engine' object has no attribute 'player1' 

回答

0

您无法访问self.player1,因为您从未启动它。你只发起球员。更改seek_player方法

def seek_player(self,input): 
    self.player1 = self.players.get(input) 
    self.player2 = Player("Shivam") 
    self.attack(self.player1, self.player2) 
    return self.player1, self.player2 

注:这是启动在init方法类变量很好的做法,你可以考虑加入

self.player1 = None 
self.player2 = None 

要将初始化()方法现在

+0

我我得到这个 '追踪(最近呼叫最后): 文件“class.py”,第64行,在 a.seek_player(输入) 文件“class.py”,第51行,在seek_player中 self.attack(player1,player2) NameError:全局名称'player1'未定义' – user3475283 2015-04-02 08:29:37

+0

对不起,我错过了我的示例中的那些变量,现在编辑它。您需要将self.attack(player1,player2)的参数更改为self.attack(self.player1,self.player2)。你必须明白,一旦你启动了Class变量(即:self.player1),你可以在你的类的任何地方访问它,但是你必须使用关键字“self”来表示Class的实例。 另外你可能不需要返回变量player1和player2。 – 2015-04-02 08:34:18

+0

对不起,听起来很愚蠢,但我已经尝试得到另一个错误。 – user3475283 2015-04-02 08:40:04

相关问题