class Character:
def __init__(self):
self.name = ""
self.health = 1
self.health_max = 1
class Player(Character):
def __init__(self):
Character.__init__(self)
self.state = 'normal'
self.health = 10
self.health_max = 10
class Monster(Character):
def Dragon(self):
self.name = "Dragon"
self.health = 20
def Goblin(self):
name = "Goblin"
health = 5
p = Player()
p.name = raw_input("Please enter your name: ")
print p.name
print p.state
print p.health
print p.health_max
m = Monster()
enemy = m.Dragon
print enemy.name
print enemy.health
抱歉,我已经简化了一些解释我遇到的困难。我在OOP的基础方面遇到了一些麻烦,并且在这段代码中遇到了问题。我正在尝试在此处创建“龙”,但遇到以下错误:
追溯(最近一次通话):
在第32行的文件“ test2.py”中
打印敌人
AttributeError:“函数”对象没有属性“名称”
你能告诉我我在做什么错吗?谢谢。
最佳答案
您必须先创建一个类的实例,然后才能从中调用任何函数:
myenemy = Enemy()
myenemy.Dragon()
在您的代码中,看起来就像您创建了
self.enemy
,但后来您调用了self.enemy = Enemy.Dragon(self)
。代替最后一行,放入self.enemy = self.enemy.Dragon(self)
。在其余的代码中,这似乎也是一个反复出现的问题。
Commands = {'explore': Player.explore}
应该是Commands = {'explore': p.explore}
(在创建实例p
之后)。自从您更新了代码以来,我认为您正在混淆函数和类。
Dragon
是一个函数,当您执行enemy = m.Dragon
时,您只是将函数复制到敌人身上。因此,当您enemy.name
认为它是一个类时,会引发错误,因为enemy
现在是一个函数,而不是实例。您将必须为不同的怪物创建单独的类:
class Dragon:
self.name = "Dragon"
self.health = 20
class Goblin:
name = "Goblin"
health = 5
关于python - 错误:未绑定(bind)方法Dragon()必须以Enemy实例作为第一个参数来调用(取而代之的是Player实例),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17437837/